?? selectmsgdemo.java
字號:
//@author: j.n.magee 11/11/96
package concurrency.message;
import java.awt.*;
import java.applet.*;
import concurrency.display.*;
public class SelectMsgDemo extends Applet {
ThreadPanel arrivals;
ThreadPanel departures;
ThreadPanel carpark;
StringCanvas cardisp;
public void init() {
setLayout(new BorderLayout());
Panel p = new Panel();
p.add(arrivals =new ThreadPanel("Arrivals",Color.blue,false));
p.add(carpark =new ThreadPanel("CarPark",Color.blue,false));
p.add(departures =new ThreadPanel("Departures",Color.blue,false));
cardisp = new StringCanvas("Carpark State",Color.cyan);
cardisp.setSize(470,100);
add("Center",cardisp);
add("South",p);
}
public void start() {
Channel arrive = new Channel();
Channel depart = new Channel();
arrivals.start(new MsgGate(arrive));
departures.start(new MsgGate(depart));
carpark.start(new MsgCarPark(arrive,depart,cardisp,4));
}
public void stop() {
arrivals.stop();
departures.stop();
carpark.stop();
}
}
/********************************************************/
class MsgGate implements Runnable {
private Channel chan;
private Object signal = new Object();
public MsgGate (Channel c) {chan=c;}
public void run() {
try {
while(true) {
ThreadPanel.rotate(12);
chan.send(signal);
ThreadPanel.rotate(348);
}
} catch (InterruptedException e){}
}
}
/********************************************************/
class MsgCarPark implements Runnable {
private Channel arrive,depart;
private int spaces,N;
private StringCanvas disp;
public MsgCarPark(Channel a, Channel l, StringCanvas d,int capacity) {
depart=l; arrive=a;
N=spaces=capacity;
disp = d;
disp.setString("Cars: "+0+" Spaces: "+spaces);
}
private void display(int s) throws InterruptedException {
disp.setString("Cars: "+(N-s)+" Spaces: "+s);
ThreadPanel.rotate(348);
}
public void run() {
try {
Select sel = new Select();
sel.add(depart);
sel.add(arrive);
while(true) {
ThreadPanel.rotate(12);
arrive.guard(spaces>0);
depart.guard (spaces<N);
switch (sel.choose()) {
case 1:depart.receive();display(++spaces);
break;
case 2:arrive.receive();display(--spaces);
break;
}
}
} catch (InterruptedException e){}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -