/*
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();
}
}
*/