记录一下
因为Thread本来就是实现了Runnable,包含Runnable的功能是很正常的啊!! 至于两者的真正区别最主要的就是一个是继承,一个是实现; 其他还有一些面向对象的思想,Runnable就相当于一个作业,而Thread才是真正的处理线程,我们需要的只是定义这个作业,然后将作业交给线程去处理,这样就达到了松耦合,也符合面向对象里面组合的使用,另外也节省了函数开销,继承Thread的同时,不仅拥有了作业的方法run(),还继承了其他所有的方法。综合来看,用Runnable比Thread好的多。
创建线程池主要有三个静态方法供我们使用,由Executors来进行创建相应的线程池: public static ExecutorSevice newSingleThreadExecutor() public static ExecutorSevice newFixedThreadPool(int nThreads) public static ExecutorSevice newCachedThreadPool() public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
我们只需要把实现了Runnable的类的对象实例放入线程池,那么线程池就自动维护线程的启动、运行、销毁。我们不需要自行调用start()方法来开启这个线程。线程放入线程池之后会处于等待状态直到有足够空间时会唤醒这个线程。
Copyright: 采用 知识共享署名4.0 国际许可协议进行许可