发表于: 2018-03-17 09:17:42
1 595
今天完成的事情:
写了一个线程池。最终线程池可以正常使用。期间遇到了很多问题。
问题1:
等待线程无法唤醒。如下图
添加任务后,等待的线程依然一直等待,查看任务容器,三个任务都在容器中没有被取走。
后来网上搜索别人写的,发现是用的锁的问题。我用的同步锁是线程池对象本身,别人用的是任务容器做锁。修改后发现任务可以唤醒,但是只有一个线程执行任务,其他线程一直等待。如下图
总是线程0执行任务。
后来发现是锁的范围使用出错,取到任务之后,就应该解锁,然后自己去执行任务就好了。不需要执行任务的时候还占用着锁。再之后发现,专门使用一个Object对象做锁也是正常的。
现在不明白的是,为什么专门用一个对象做锁可以,用线程池一个属性做锁可以,但是用线程池对象做锁就会出现无法唤醒的问题。
明天计划的事情:学习使用lock接口,用lock接口的方法写一个线程池。
遇到的问题: 现在还想不明白为什么不能用线程池对象本身做锁。
收获:学会了写线程池。
最后结果:
评论