多线程的基础部分学完了。惯例用自己的语言总结一下。
其实线程就是工人,就像线程类里的Executor名称暗示的那样。可以把一个进程看做一个车间,每个车间只要开着,里边肯定要有至少一个线程在工作,否则车间就处于没有运行的状态。这个线程就是主线程。
而其他的线程就相当于可以额外过来干活的工人,有的工人可以现场招募然后解雇,这就是开了一个线程然后再销毁;有的工人是一直雇佣着,有事就喊来上班,没事就旁边歇着,这种就是线程池。
锁,其实可以理解为一个监工。假如有个东西需要多次加工,也就是每个工人必须做一小段工作,而不是每个人同时上去抡锤子开干,这样每次要加工这个东西的时候,监工都要在旁边看着,谁抢到这个工位,谁就上去干,其他人只能在旁边等着,然后下一次继续再抢工位,直到事情干完。如果一个工人干完了,他可以选择通知监工,让监工喊一嗓子,这哥们干完了,下一个要干活的人快点过来,这就是唤醒其他线程。
在程序里,有点特殊,可以把监工和需要加工的东西合为一体,这就是synchronized语句中一般传入this当做对象监视器的做法,如果专业一点,找专门的对象来当监工,那就是锁对象了,专业的监工有个好处是更灵活,可以监视加工品或者在程序的不同地方监工
多线程最大的意义,是提供了一种新的思维方式,从原来的按照顺序解决问题,变成了可以并行解决问题,更加像现实中的情况。当然也带来了复杂度的提升,所以并发编程值得深入研究。现在已经知道,如果要发送邮件,读个东西,都可以启动一个新线程去干,然后等着结果。未来期待与多线程再相会。