从上图看,Java程序天生就是多线程的。那么有几种启动线程的方式呢?
第一种:继承Thread
第二种:实现Runnable
前两种有个共同的热点,就是run方法执行完都是没有返回值的,那假如说需要返回值,如何处理呢?
Callable.java 出现了
但是new Thread() 不允许传入Callable,此时需要引入一个类,FeatureTask.java,代码如下:
futureTask.get就可以获取到结果。
在JDK中Runnable和Callable是对任务的抽象。
Thread是对线程的抽象。
中断线程:
中断了之后,一点用没有,因为while循环里面不停执行工作。
由此可见,线程之间是协作式,不是抢断式(kill -9 进程号)。
start和run方法区别:
运行完的结果:
主线程在执行。 并不是beCalled线程。
如果改成.start(),则是 beCalled线程。