zhangchaoyang

老师,这里我有点疑惑,那实现多线程到底有几种方式?那用Timer新建线程的方式算不算呢?

2019-09-10
7
1
回复 7
李一鸣 回复 zhangchaoyang

你好,每一个Timer是一个单独的线程,它持有TimerTask的队列,队列中的task串行执行。TimerTask实现了runnable接口,你自己的TimerTask需要实现run方法,以提供Timer线程执行task的逻辑。本质上和本文讲的通过Thread启动线程,实现run方法提供运行逻辑的方式是一致的。

2019-09-10
zhangchaoyang 回复 李一鸣

那FutureTask和Excetutor的本质也是通过Thread和runnable的吧,如果是的话,那为什么FutureTask和Excetutor就属于实现多线程的方式,而Timer就不算?这个衡量的标准是什么呢?

2019-09-10
李一鸣 回复 zhangchaoyang

是的同学,线程的实现方式本质上只有两种,继承Thread类和实现Runnable接口。FutureTask 和 Executor也是通过 Thread 和 runnable 。我这里没有把Timer列入多线程的实现方式,是因为Timer的主要用途为定时触发任务,而同步还是异步执行任务只是Timer的实现方式。从包结构可以看出,Timer并不在java.util.concurrent包中。^^

2019-09-10
君阳 回复 zhangchaoyang

真实的可以说只有一种,那就runnable

2019-11-26
你是星空 回复 李一鸣

老师可以改下文章里写的四种吗,这样看起来不太严谨哦

2020-01-02
Juning 回复 君阳

runnable只是最好的实现方法

2020-03-28
JTravler 回复 你是星空

你这样说也不严谨吧,本来就是说实现多线程方式,FutureTask和Executor既然也能实现多线程,那就没问题吧

2020-06-09
没有更多内容
取消 回复 发送