Java 创建线程的4种方式
继承 Thread 类
Thread thread = new Thread(new Thread() {
@Override
public void run(){
System.out.println("继承 Thread 类");
}
});
thread.start();
实现 Runnable 接口
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("实现 Runnable 接口");
}
}).start();
使用 FutureTask 和 Callable组合创建有返回值线程
FutureTask futureTask = new FutureTask((Callable<String>) () -> {
TimeUnit.SECONDS.sleep(5);
return "使用 FutureTask 和 Callable组合创建有返回值线程";
});
new Thread(futureTask).start();// 必须把任务交给线程类去启动
Object o = futureTask.get();// get() 方法会导致阻塞
System.out.println(1111);
if (futureTask.isDone()) {
System.out.println(o);
}
使用 Executors 线程池创建线程
ExecutorService executor = Executors.newFixedThreadPool(2);
Future<Integer> future = executor.submit(() -> {
TimeUnit.SECONDS.sleep(5);
int a = 22;
int b = 10;
return a * b;
});
Integer s = future.get();
System.out.println(s);
executor.shutdown();
其中,在 JDK1.8 中,使用Lambda表达式可以简化部分代码
new Thread(() -> {
System.out.println("使用Thread执行线程");
}).start();
注意:FutureTask 的 get() 方法,会导致线程阻塞