多线程

创建线程的多种方式

继承Thread类

class A extends Thread {
    @Override
    public void run() {
        System.out.println("A");
    }
}
public static void main(String[] args) {
    new A().start();
}

实现Runnable接口

class B implements Runnable {
    @Override
    public void run() {
        System.out.println("B");
    }
}
public static void main(String[] args) {
    Thread t = new Thread(new B());
    t.start();
}

匿名内部类

/* 方式一 */
new Thread() {
    public void run() {
        System.out.println("A");
    }
}.start();

/* 方式二 */
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("B");
    }
}).start();

/* 两者都写输出D,因为重写了父类中的run方法 */
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("C");
    }
}) {
    public void run() {
        System.out.println("D");
    }
}.start();

Callable(返回结果、抛出异常)

class D implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        Thread.sleep(2000);
        System.out.println("D");
        return 1;
    }
}

public static void main(String[] args) {
    FutureTask<Integer> task = new FutureTask<>(new D());
    new Thread(task).start();
    try {
        /* 如果任务没完成则会阻塞直到任务完成 */
        int res = task.get();
        System.out.println("结果为:" + res); //结果为:1
    } catch (Exception e) {
        System.err.println("出现异常");
    } 
}

定时器

Timer timer =  new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        System.out.println("here");
    }
}, 1000, 5000); //每隔5秒执行一次,1秒后执行

线程池

ExecutorService es = Executors.newFixedThreadPool(2);
for (int i = 0; i <20; i++) {
    es.execute(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
    });
}
es.shutdown();
输出:
pool-1-thread-1
pool-1-thread-2
pool-1-thread-2
pool-1-thread-1
...

Lambda表达式实现

????????????

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.1 多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念。 进程:进程指正在运行的程序。确切的来说...
    Pecksniff1994阅读 5,484评论 0 2
  •   一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺...
    OmaiMoon阅读 5,631评论 0 12
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 8,065评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 7,186评论 1 15
  • 先看几个概念:线程:进程中负责程序执行的执行单元。一个进程中至少有一个线程。多线程:解决多任务同时执行的需求,合理...
    yeying12321阅读 3,573评论 0 0