?? garden.java
字號:
// j.n.magee 11/11/96
package concurrency.garden;
import java.awt.*;
import java.applet.*;
import concurrency.display.*;
public class Garden extends Applet {
Button goButton;
Turnstile west;
Turnstile east;
Counter counter;
NumberCanvas counterD;
NumberCanvas westD;
NumberCanvas eastD;
Checkbox fixit;
public final static int MAX = 20;
public void init() {
super.init();
// Set up Button and Checkbox
Panel p0= new Panel();
p0.add(goButton = new Button(" Go "));
goButton.setFont(new Font("Helvetica",Font.BOLD,24));
Panel p1= new Panel();
p1.setLayout(new BorderLayout());
p1.add("Center",p0);
p1.add("East",fixit = new Checkbox("Fix It"));
// Set up Display
Panel p2 = new Panel();
counterD = new NumberCanvas("Counter");
westD = new NumberCanvas("West",Color.green);
eastD = new NumberCanvas("East",Color.green);
counterD.resize(150,100);
westD.resize(100,100);
eastD.resize(100,100);
p2.add(westD);
p2.add(counterD);
p2.add(eastD);
// Arrange Applet display
setLayout(new BorderLayout());
add("Center",p2);
add("South",p1);
}
private void go() {
if (!fixit.getState())
counter = new Counter(counterD);
else
counter = new SynchronizedCounter(counterD);
west= new Turnstile(westD,counter);
east= new Turnstile(eastD,counter);
west.start();
east.start();
}
public boolean handleEvent(Event event) {
if (event.id != event.ACTION_EVENT) {
return super.handleEvent(event);
} else if(event.target==goButton) {
if (west==null && east==null)
go();
else if (!west.isAlive() && !east.isAlive())
go();
return true;
} else
return super.handleEvent(event);
}
}
class Counter {
int value=0;
NumberCanvas display;
Counter(NumberCanvas n) {
display=n;
display.setvalue(value);
}
void increment() {
int temp = value; //read[v]
Simulate.HWinterrupt();
value=temp+1; //write[v+1]
display.setvalue(value);
}
}
class SynchronizedCounter extends Counter {
SynchronizedCounter(NumberCanvas n)
{super(n);}
synchronized void increment() {
super.increment();
}
}
class Turnstile extends Thread {
NumberCanvas display;
Counter people;
Turnstile(NumberCanvas n,Counter c)
{ display = n; people = c; }
public void run() {
try{
display.setvalue(0);
for (int i=1;i<=Garden.MAX;i++){
Thread.sleep(500); //0.5 second
display.setvalue(i);
people.increment();
}
} catch (InterruptedException e) {}
}
}
class Simulate {
public static void HWinterrupt() {
if (Math.random()<0.5)
try{Thread.sleep(200);} catch(InterruptedException e){};
//used instead of Thread.yield() to ensure portability
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -