/*
1. 5辆汽车过山洞,依次经过山洞。每辆车通过山洞花费10秒,使用多线程实现。
class Shan {
}
class Car extends Thread {
Shan shan;
String name;
public Car(String name, Shan shan) {
this.name = name;
this.shan = shan;
}
public void run() {
synchronized (shan) {
System.out.println("wo is " + name);
try {
Thread.sleep(2000);
}catch (Exception e){
}
}
}
}
class Demo {
public static void main(String[] arg) {
Shan shan = new Shan();
Car c1 = new Car("1",shan);
Car c2 = new Car("2",shan);
Car c3 = new Car("3",shan);
Car c4 = new Car("4",shan);
Car c5 = new Car("5",shan);
Car c11 = new Car("11",shan);
Car c12 = new Car("12",shan);
Car c13 = new Car("13",shan);
Car c14 = new Car("14",shan);
Car c15 = new Car("15",shan);
c1.start();
c2.start();
c3.start();
c4.start();
c5.start();
c11.start();
c12.start();
c13.start();
c14.start();
c15.start();
}
}
*/
/*
2. 用多线程模拟蜜蜂和熊的关系。
蜜蜂是生产者,熊是消费者。蜜蜂生产蜂蜜是累加的过程,熊吃蜂蜜是批量(满100吃掉)的过程。
生产者和消费者之间使用通知方式告知对方。注意不能出现死锁的现象。
class Fengmi {
int nu;
}
class Beam extends Thread{
Fengmi fm;
public Beam (Fengmi fm) {
this.fm = fm;
}
public void run() {
synchronized(fm) {
while(true) {
System.out.println(++fm.nu);
if (fm.nu == 100) {
fm.nu=100;
try {
fm.notify();
fm.wait();
} catch (Exception e) {
}
}
}
}
}
}
class Bear extends Thread{
Fengmi fm;
public Bear (Fengmi fm){
this.fm = fm;
}
public void run() {
while(true) {
synchronized(fm) {
if (fm.nu == 100) {
fm.nu = 0;
System.out.println("bear 都吃了");
try {
fm.notify();
System.out.println("等待中");
fm.wait();
} catch (Exception e) {
}
}
}
}
}
}
class Demo {
public static void main(String[] arg) {
Fengmi fm = new Fengmi();
Beam beam = new Beam(fm);
Bear bear = new Bear(fm);
beam.start();
bear.start();
}
}
*/