
面向的读者是已经熟练使用过线程池,集成Runnable,直接new Thread 里面编写run方法
虽然方式和种类很多,但是运行到源码层面方式其实只有一种,我们此篇文章就进行讲解
Runnable 源码
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
Runnable 只是一个接口,所以一个类实现了Runnable,直接调用这个类的run方法和调用一个普通 的方法没什么区别,并不会启动一个线程
Thread 源码 实现了Runnablepublic class Thread implements RunnableRun
@Override
public void run() {
if (target != null) {
target.run();
}
}
首先Thread实现Runnable 接口,那么Thread的run方法是否具备启动一个线程的特性,答案是否定的,Thread的run方法和普通方法没有任何区别
run方法和普通方法没什么区别,和启动线程也无关
start 方法public synchronized void start() {
group.add(this);
boolean started = false;
try {
start0();
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
}
}
}
start方法调用start0,start0是一个native方法
private native void start0();
唤起线程的方式只有一种,就是Thread类的 start 方法
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)