1. 5辆汽车过山洞,依次经过山洞。每辆车通过山洞花费10秒,使用多线程实现。
2. 用多线程模拟蜜蜂和熊的关系。
蜜蜂是生产者,熊是消费者。蜜蜂生产蜂蜜是累加的过程,熊吃蜂蜜是批量(满100吃掉)的过程。
生产者和消费者之间使用通知方式告知对方。注意不能出现死锁的现象。
----------------------------------------------------------------------------------------------
public class Box
{
private final int Max=100;
private int Size=0;
public synchronized void add(){
if(Size<Max){
Size++;
System.out.println("蜂蜜增加到了"+Size+"个");
this.notifyAll();
//如果成了通知别的参与者来取锁
//熊一定被唤醒
}else{
this.wait();
//如果大于等于100当前线程休眠
//this.notify();
//this.wait();
}
}
public synchronized void eat(){
if(Size>=Max){
Size=0;
System.out.println("吃完了蜂蜜");
this.notifyAll();
//唤醒所有蜜蜂可以采蜜了
}else{
this.wait();
//如果没有到100个熊就等待,将自己加入等待Box的队列
}
}
}
public class Bear extends Thread
{
private Box box;
public Bear (Box box){
this.box=box;
}
public void run(){
while(true){
box.eat();
}
}
}
public class Bee extends Thread
{
private Box box;
//蜜蜂有一个Box只有大家的Box是同一个的时候线程才同步
public Bee (Box box){
this.box=box;
}
public void run(){
while(true){
box.add();
}
}
}