线程通信(理论)

72 阅读2分钟

什么是线程通信、如何实现

1、所谓线程通信就是线程间相互发送数据,线程通信通常通过共享一个数据的方式实现

2、线程间会根据共享数据的情况决定自己该怎么做,以及通知其他线程怎么做

3、线程通信的前提:线程通信通常是在多个线程操作同一个共享资源的时候需要进行通信,且必须保证线程安全

线程通信常见模型

1、生产者与消费者:生产者线程负责产生数据,消费者线程负责消费数据

2、要求:生产者线程产生完数据后,唤醒消费者,然后等待自己;消费者消费完后,唤醒生产者,然后等待自己

说的形象一点:儿子去上学,儿子发现没有生活费了,于是打电话给爸爸要生活费,爸爸给儿子打了一个月生活费,然后爸爸又去挣钱了,直到儿子没有生活费,儿子又打电话给爸爸说没生活费了,然后爸爸又给儿子打生活费,儿子继续消费 然后一直一直循环....这就是线程通信比较常见的模型

线程的等待和唤醒方法由Object类提供

void notify() //唤醒正在等待的单个线程

void notifyAll() //唤醒正在等待的所有线程

void wait() //让当前线程等待并释放占锁,直到另一个线程调用notify()方法或notifyAll()方法 上述方法应该使用当前同步锁对象进行调用

//对于实例方法建议使用this作为锁对象 3、对于静态方法建议使用字节码(类名.class)对象作为锁对象