创建多线程
三种方法
-
直接使用 Thread
// 通过直接继承Thread类来创建新的线程,覆盖run()方法 Thread t1 = new Thread() { @Override public void run() { log.debug("hello"); } }; t1.start();
-
使用 Runnable 配合 Thread
Runnable r = () -> log.debug("running"); Thread t2 = new Thread(r); t2.start();
-
Java 8 以后可以使用 lambda 指南代码:
Runnable task2 = () -> log.debug("hello"); Thread t2 = new Thread(task2, "t2"); t2.start();
-
一般来说,推荐使用实现 Runnable 接口的方式,因为这样可以避免单继承的限制。
-
-
FutureTask 配合 Thread
FutureTask<Integer> task = new FutureTask<>(() -> { log.debug("running"); return 100; }); new Thread(task, "t1").start(); Integer result = task.get(); log.debug("result: {}", result);
-
定义一个线程任务类实现 Callable 接口,声明线程执行的结果类型:
class MyCallable implements Callable<Integer> { @Override public Integer call() throws Exception { log.debug("running"); return 100; } }
-
重写线程任务类的 call 方法,这个方法可以直接返回线程执行的结果:
Callable<Integer> callable = new MyCallable(); FutureTask<Integer> futureTask = new FutureTask<>(callable);
-
创建一个 Callable 的线程任务对象:
FutureTask<Integer> task = new FutureTask<>(callable); new Thread(task, "t1").start();
-
FutureTask 就是 Runnable 对象,因为 Thread 类只能执行 Runnable 实例的任务对象,所以把 Callable 包装成 FutureTask 对象。
-
调用线程对象的 start() 方法启动线程。
-