多线程练习题:
生产者与消费者:生产者生产一个包子,消费者就去吃一个包子
上代码:
public class Test7 {
static Object object = new Object();//锁
static boolean flag = true;//控制线程执行顺序
static int num=0;//如果包子等于10,则退出程序
public static void main(String[] args) {
Producer producer = new Producer();
Consumer consumer = new Consumer();
Thread proThread = new Thread(producer, "生产者");
proThread.start();
Thread conThread = new Thread(consumer, "消费者");
conThread.start();
}
}
//生产者
class Producer implements Runnable {
@Override
public void run() {
while (true) {
synchronized (Test7.object) {
//生产10个包子后,退出程序
if ( Test7.num==10) {
System.exit(0);
}
if (Test7.flag) {
System.out.println(Thread.currentThread().getName() + "生产了一个包子");
Test7.flag = false;
Test7.num++;
try {
Test7.object.wait();//等待消费者唤醒
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
}
}
//消费者
class Consumer implements Runnable {
@Override
public void run() {
while (true) {
synchronized (Test7.object) {
try {
//唤醒等待线程,使其进入可执行状态。注意:不会立即释放锁,下面代码会继续执行
Test7.object.notify();
} catch (Exception ex) {
ex.printStackTrace();
}
if (!Test7.flag) {
System.out.println(Thread.currentThread().getName() + "消费了一个包子");
Test7.flag=true;
}
}
}
}
}
如有不对之处,欢迎交流。