创建线程,利用互斥实现线程共享变量通信
一. 概述
1.1 课题目的和意义
掌握线程创建和终止,加深对线程和进程概念的理解,会用同步与互斥方
法实现线程之间的通信。
1.2 生产者—消费者问题
生产者—消费者问题(Producer_consumer)是一个经典的进程(线程)同步的
问题。它描述的是:有一群生产者进程在生产产品,并将此产品提供给消费者进
程(线程)去消费。为使生产者进程和消费者进程(线程)能并发执行,在它们之间
设置有个缓冲区的缓冲池,生产者进程(线程)可将它所生产的产品放入一个缓冲
区中,消费者进程(线程)可从一个缓冲区取得一个产品消费。尽管所有的生产者
进程和消费者进程(线程)都是以异步的方式运行的,但它们之间必须保持同步,
即不允许消费者进程(线程)到一个空缓冲区去取产品,也不允许生产者进程(线
程)向一个已装有消息尚未被取走产品的缓冲区投放产品。如下图所示:
1.3 线程所采用的同步方法
同步是多线程中的重要概念.同步的使用可以保证在多线程运行的环境中,程
充不会产生设计之外的结果.同步的实现方式有两种,同步方法和同步块.
线程在执行同步方法是具有排它性的.当任意一个线和进入到一个对象的任意
一个同步方法时,这个对象所有同步方法都被锁定,在些期间,期他任何线程都不
能访问这个对象的任意一个同步方法,直到这个线程执行完它所调用的同步方法
并从中退出,从而导至它释放了该对象的同步锁这后.在一个对象被某个线程锁定
之后,其他线程是可以访问.
同步的有几种实现方法,分别是:
wait():使一个线程处于等待状态,并且释放所有持有的对象 lock.
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法
要捕捉 InterruptedException 异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并
不能确切的唤醒某一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,而且