直接用Thread
//直接用Thread
Thread t = new Thread(){
public void run(){
//...
}
};
//启动线程
t.start();
//赋名
t.setName("t1")
Runnable配合Tread
//Thread 代表线程 Runnable可运行的任务
Runnable runnalbe = new Runnable(){
public void run(){
//...
}
};
//创建线程对象
Thread t = new Thread (runnable,"t2");
//启动线程
t.start();
//java 8以后可以使用lambda精简代码
Runnable task =()->{
//...
}
//创建任务对象
Thread t = new Thread(task,"t2");
//启动
t.start();
Thread与Runnable的关系
-
Thread把线程和任务合并在了一起,Runnable方法把线程和任务分开了
-
Runnable更容易与线程池高级API配合
-
用Runnable让任务脱离了Thread继承体系 更灵活
FutureTask配合Thread
能接收Callable类型的参数,用来处理有返回结果的情况
//创建任务对象
FutureTask<Integer> task3 = new FutureTask<>(()->{
log.debug("running")
return 100;
});
Thread t = new Thread(task,"t3").start();
//主线程阻塞,同步等待task执行完毕的结果
Integer result =t.get();//返回任务执行结果