你好,每一个Timer是一个单独的线程,它持有TimerTask的队列,队列中的task串行执行。TimerTask实现了runnable接口,你自己的TimerTask需要实现run方法,以提供Timer线程执行task的逻辑。本质上和本文讲的通过Thread启动线程,实现run方法提供运行逻辑的方式是一致的。
那FutureTask和Excetutor的本质也是通过Thread和runnable的吧,如果是的话,那为什么FutureTask和Excetutor就属于实现多线程的方式,而Timer就不算?这个衡量的标准是什么呢?
是的同学,线程的实现方式本质上只有两种,继承Thread类和实现Runnable接口。FutureTask 和 Executor也是通过 Thread 和 runnable 。我这里没有把Timer列入多线程的实现方式,是因为Timer的主要用途为定时触发任务,而同步还是异步执行任务只是Timer的实现方式。从包结构可以看出,Timer并不在java.util.concurrent包中。^^
真实的可以说只有一种,那就runnable
老师可以改下文章里写的四种吗,这样看起来不太严谨哦
runnable只是最好的实现方法
你这样说也不严谨吧,本来就是说实现多线程方式,FutureTask和Executor既然也能实现多线程,那就没问题吧
老师,这里我有点疑惑,那实现多线程到底有几种方式?那用Timer新建线程的方式算不算呢?