📄 primes.java
字号:
/*
@author j.n.magee 25/04/98
*/
package concurrency.primes;
import java.awt.*;
import java.applet.*;
import concurrency.connector.*;
public class Primes extends Applet {
PrimesCanvas display;
Button goBuf,goNoBuf;
Generator gen;
Filter filter[] = new Filter[N];
static int N = 7; // number of filters
static int EOS = -1;
public void init() {
setLayout(new BorderLayout());
display = new PrimesCanvas("Primes Sieve", Color.cyan, N+1);
add("Center",display);
Panel p0= new Panel();
p0.add(goNoBuf = new Button(" Go - unbuffered "));
p0.add(goBuf = new Button(" Go - buffered "));
goBuf.setFont(new Font("Helvetica",Font.BOLD,24));
goNoBuf.setFont(new Font("Helvetica",Font.BOLD,24));
add("South",p0);
}
private void go(boolean buffered) {
display.clear();
// create channels
Pipe pipe[] = new Pipe[N+1];
for (int i=0; i<N; ++i)
if (buffered)
pipe[i] = new PipeImplBuf();
else
pipe[i] = new PipeImplUnBuf();
//create threads
gen = new Generator(pipe[0],display);
for (int i=0; i<N; ++i)
filter[i] =new Filter(pipe[i],pipe[i+1],i+1,display);
gen.start();
for (int i=0; i<N; ++i) filter[i].start();
}
private boolean ended() {
for (int i=0; i<N; ++i)
if (filter[i]!=null && filter[i].isAlive()) return false;
if (gen!=null && gen.isAlive()) return false;
return true;
}
public void stop() {
for (int i=0; i<N; ++i)
if (filter[i]!=null && filter[i].isAlive()) {
filter[i].interrupt();
filter[i].stop(); //necessary for 1.0 compatibility
}
if (gen!=null && gen.isAlive())
{gen.interrupt();
gen.stop(); //necessary for 1.0 compatibility
}
display.clear();
}
public boolean handleEvent(Event event) {
if (event.id != event.ACTION_EVENT) {
return super.handleEvent(event);
} else if(event.target==goNoBuf) {
if (ended()) go(false);
return true;
} else if(event.target==goBuf) {
if (ended()) go(true);
return true;
} else
return super.handleEvent(event);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -