📄 supervisorworker.java
字号:
/*
@author j.n.magee 25/04/98
*/
package concurrency.supwork;
import java.awt.*;
import java.applet.*;
import concurrency.connector.*;
public class SupervisorWorker extends Applet {
SupervisorCanvas display;
WorkerCanvas red,green,yellow,blue;
Button fn1,fn2,fn3;
Font buttonFont = new Font("TimesRoman",Font.ITALIC,18);
Font titleFont = new Font("SanSerif",Font.ITALIC+Font.BOLD,24);
Thread supervisor, redWork,greenWork, yellowWork,blueWork;
public void init() {
setLayout(new BorderLayout());
display = new SupervisorCanvas("Supervisor", Color.cyan);
add("Center",display);
Panel p0= new Panel();
p0.add(fn1 = new Button("f(x) = 1 - x*x"));
p0.add(fn2 = new Button("f(x) = 1-x*x*x"));
p0.add(fn3 = new Button("f(x) = x*x+0.1"));
fn1.setFont(buttonFont);
fn2.setFont(buttonFont);
fn3.setFont(buttonFont);
add("South",p0);
Panel p1 = new Panel();
p1.setBackground(Color.cyan);
p1.setLayout(new GridLayout(6,1));
Label w = new Label("Workers");
w.setFont(titleFont);
p1. add(w);
p1. add(red = new WorkerCanvas(Color.red));
p1. add(green = new WorkerCanvas(Color.green));
p1. add(yellow = new WorkerCanvas(Color.yellow));
p1. add(blue = new WorkerCanvas(Color.blue));
add("East",p1);
}
int slice=0;
private void go(Function fn) {
display.reset(fn);
TupleSpace bag = new TupleSpaceImpl();
redWork = new Worker(red,bag,fn);
greenWork = new Worker(green,bag,fn);
yellowWork = new Worker(yellow,bag,fn);
blueWork = new Worker(blue,bag,fn);
supervisor = new Supervisor(display,bag);
redWork.start();
greenWork.start();
yellowWork.start();
blueWork.start();
supervisor.start();
}
private boolean ended() {
if (redWork!=null && redWork.isAlive()) return false;
if (greenWork!=null && greenWork.isAlive()) return false;
if (yellowWork!=null && yellowWork.isAlive()) return false;
if (blueWork!=null && blueWork.isAlive()) return false;
if (supervisor!=null && supervisor.isAlive()) return false;
return true;
}
public void stop() {
if (redWork!=null && redWork.isAlive())
{redWork.interrupt();redWork.stop();}
if (greenWork!=null && greenWork.isAlive())
{greenWork.interrupt();greenWork.stop();}
if (yellowWork!=null && yellowWork.isAlive())
{yellowWork.interrupt();yellowWork.stop();}
if (blueWork!=null && blueWork.isAlive())
{blueWork.interrupt();blueWork.stop();}
if (supervisor!=null && supervisor.isAlive())
{supervisor.interrupt();supervisor.stop();}
}
public boolean handleEvent(Event event) {
if (event.id != event.ACTION_EVENT) {
return super.handleEvent(event);
} else if(event.target==fn1) {
if (ended()) go(new OneMinusXsquared());
return true;
} else if(event.target==fn2) {
if (ended()) go(new OneMinusXcubed());
return true;
} else if(event.target==fn3) {
if (ended()) go(new XsquaredPlusPoint1());
return true;
} else
return super.handleEvent(event);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -