了解知识点并不一定是最重要的,而如何能正确的应用才是最考验对知识点的理解。关于这两种线程的问题,一直以来知识点的误区在于Thread是同步的而Runable是异步的,即同样去处理一个资源,每个Thread会把这个资源单独算一份,而Runable是共用一份,包括很多培训机构讲课就是这么讲的,这几天重新翻看这个知识点,发现以前的这种想法是错误的。
为什么要研究线程,主要目的在于可以构造多线程去处理任务,这无疑使处理事情的效率吨量上升,办事快人人都喜欢,自然都喜欢研究它。就最新的温习结果来看,两者区别主要在于,Thread通过继承的方式使用,而Runable通过接口实现的方式使用,其他无所谓同步异步的区别,也无所谓内部封装方法不同,也就是说,两者用起来几乎是没有差别的。因为Thread内部本质上也是实现的Runable接口,调用的也是Runable的run()方法,只是对其重写了而已,而实现Runable接口也是一样的调用重写的run()方法,也就是说两者调用方法的源头是一样的,因此两者在使用上没有本质区别。那如何保证单线程和多线程使用的时候同步的问题呢?单个线程:对共有资源加static关键字,对要执行的资源对象加锁,synchonized、lock都可以;多个线程:对共有资源加线程可见性关键字volatile,或者使用原子化的包装类,如AtomicInteger,AtomicLong,AtomicAarray等,然后再对要执行的资源对象加锁,synchonized、lock等。
以上是个人对该知识点的继承程度,以前觉得是对的,现在未必,日子在流逝,知识的理解也在发生变化,有时间,重新梳理一下旧的知识点,也许会发现新的不同。