概述
当需要多线程配合完成一项任务时,往往需要用到线程间通信,以确保任务的稳步快速运行
相关语句
wait():挂起线程,释放锁,相当于自动放弃了执行权限
notify():唤醒wait等待队列里的第一个线程
notifyAll():唤醒所有等待队列中的线程
他们都使用在同步中,因为要对持有监视器(锁)的线程操作,所以要使用在同步中,因为只有同步才具有锁
相关问题 为什么这些操作线程的方法要定义在Object类中
因为这些方法是依赖于锁进行的,而锁又是任意对象,所以这些方法必须定义在Object中,才可以被任意对象的锁调用
为什么使用notifyAll而不是notify
因为notify唤醒的只是等待队列里的第一个线程,该线程不确定,,有可能是对方线程,也有可能是本方线程,所以要使用notifyAll来唤醒所有线程,并配合while循环判断标记才能保证运行的正常
实例代码
GunisEmpty;putBullet()shotBullet()(bullet == 0)PutBullet .g = g;run()ShotBullet .g = g;run()MutiThreadDemo main(String[] args) Thread(Thread(new ShotBullet(g)).start(); 101:} 102: }飞机一阵抖动,我终于说出了最后一句再见。