image.png
1、干活的和线程创建启动应该解耦
2、Runable 可以更好利用线程池,不用单独创建线程,减少资源消耗
3、单继承的限制
本质上都是调用start方法,本质上没有区别,区别在于run的来源不同。
public void run(){
if(target!=null){
targret.run()
}
}
thread 整个run被重写
runable 是 target.run()
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("runable");
}
}) {
@Override
public void run() {
System.out.println("thread");
}
}.start();
会执行thread类的run,因为重写了run,经典的三行代码没了
创建线程的方法只有构造Thread类,而创建线程执行单元有两种方式
调用两次run方法会抛异常
private volatile int threadStatus = 0;
if (threadStatus != 0)
throw new IllegalThreadStateException();
网友评论