主类:
producer p = new producer();
food me = new food();
me.eat(times,p);
....>Rest of Code<.......
其他班级:
class food {
public int times;
public int food;
public boolean canget=false;
boolean done=false;
void eat(int times,producer p){
this.times = times;
p.produce(this);
consumer pe = new consumer();
pe.consume(this);
}
synchronized void add(int n){
while(canget) {
try {
wait();
} catch (Exception e) {
System.out.println("Something nasty happened");
}
}
this.food = n;
System.out.println("Produced food '"+n+"'");
canget = true;
notify();
}
synchronized int get(){
while (!canget){
try{
wait();
}catch (Exception e) {
System.out.println("Something Nasty happened");
}
}
canget = false;
notify();
System.out.println("Eaten food '"+this.food+"'");
return this.food;
}
}
class producer implements Runnable{
int times;
food f;
boolean done;
boolean done(Thread t) {
return done;
}
void produce(food F){
times=F.times;
f=F;
Thread t = new Thread(this);
t.start();
}
public void run() {
while(this.times-- > 0){
f.add(times);
}
}
}
class consumer implements Runnable{
int times;
food f;
void consume(food F){
times=F.times;
f=F;
Thread t = new Thread(this);
t.start();
}
public void run() {
while(this.times-- > 0){
f.get();
}
}
}
在此声明之后:
me.eat(times,p);
代码的其余部分正在运行,但我想,经过线程通过运行food
,producer
并consumer
完成。我怎样才能做到这一点?
您可以使用CountDownLatch允许生产者和使用者在完成操作时发出信号,并在主代码中等待该信号。
主要代码:
int times = 3;
CountDownLatch completion = new CountDownLatch(2);
producer p = new producer(completion);
food me = new food(completion);
me.eat(times, p);
try {
completion.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Done");
更新的课程:
class food {
public int times;
public int food;
public boolean canget = false;
private CountDownLatch completion;
public food(CountDownLatch completion) {
this.completion = completion;
}
void eat(int times, producer p) {
this.times = times;
p.produce(this);
consumer pe = new consumer(completion);
pe.consume(this);
}
synchronized void add(int n) {
while (canget) {
try {
wait();
} catch (Exception e) {
System.out.println("Something nasty happened");
}
}
this.food = n;
System.out.println("Produced food '" + n + "'");
canget = true;
notify();
}
synchronized int get() {
while (!canget) {
try {
wait();
} catch (Exception e) {
System.out.println("Something Nasty happened");
}
}
canget = false;
notify();
System.out.println("Eaten food '" + this.food + "'");
return this.food;
}
}
class producer implements Runnable {
int times;
food f;
boolean done;
private CountDownLatch completion;
public producer(CountDownLatch completion) {
this.completion = completion;
}
void produce(food F) {
times = F.times;
f = F;
Thread t = new Thread(this);
t.start();
}
public void run() {
while (this.times-- > 0) {
f.add(times);
}
completion.countDown();
}
}
class consumer implements Runnable {
int times;
food f;
private CountDownLatch completion;
public consumer(CountDownLatch completion) {
this.completion = completion;
}
void consume(food F) {
times = F.times;
f = F;
Thread t = new Thread(this);
t.start();
}
public void run() {
while (this.times-- > 0) {
f.get();
}
completion.countDown();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句