1、创建线程的3中方式
(1)继承Thread类,重写其run()方法。
(2)实现Runnable接口,实现其run()方法。
其中实现Runnable接口中的run()方法中的内容为任务。
需要绑定线程对象去执行该任务。
Thread thread = new Thread(ImplRunnale);
tread.start();
(3) 类实现callable接口,定义任务。
class callable implements Callable<Integer>{
@Override
public Integer call() throws Exception {
System.out.println("我是callable");
return 1;
}
}
在主线程中创建FutureTask对象,FutureTask对象实现了Future接口,该接口定义了
对线程的操作,同时该对象又实现runnable接口所以又是个任务。
在创建FutureTask的构造方法中,传入的是实现callable接口的对象
这样就创建一个有返回结果、可抛出异常的任务。
使用Thread(FutureTask)实现一个线程。
callable t3 = new callable();
FutureTask<Integer> futureTask = new FutureTask<>(t3);
Thread thread3 = new Thread(futureTask);
thread3.start();
// 接受callable线程执行的结果
Integer result = 0;
try {
result = futureTask.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
System.out.println("我是callable执行的结果"+result);