一、 线程间通信
概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。
例如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个是生产,一个是消费,那么线程A与线程B之间就存在线程通信问题。
1.1线程之间为什么需要进行通信?
我们都知道,要想能够去执行一个线程,首先这个线程需要获取CPU的执行权,当这个线程执行完毕之后,就会释放CPU资源,并发执行的时候,剩下的处于就绪状态的线程就会一起去争夺CPU的执行权,谁抢到谁就执行。但是在开发过程中,我们可能需要多个线程进行协调配合来完成一件事。并且需要线程之间有规律的去执行任务。这就需要线程之间相互通信了。也就是说当多个线程共同去争夺同一个cpu资源的时候,只能有一个线程能够抢到,其他没抢到的就会进入阻塞状态,等待抢到cpu资源的线程执行结束再去抢夺。例如:烤鸭店老板A将烤鸭生产好之后,就叫顾客B过来吃。B吃完之后,通知A继续生产制作。
注意:
A先生产,此时B在等待A生产好。
A生产好之后,通知B来吃,相当于B被A唤醒。
线程之间的通信依靠的是wait()、notify()、notifyAll()方法进行协调。这三个方法都是定义在了Object类中。