📄 jlab0802.java
字号:
class ProduceInteger extends Thread {
private HoldInteger sharedObject;
public ProduceInteger(HoldInteger shared) {
super("ProduceInteger");
sharedObject =shared;
}
public void run() {
for(int count =1;count<=10;count++) {
try {
Thread.sleep((int)(Math.random()*3000));
}
catch(InterruptedException exception) {
System.err.println( exception.toString());
}
sharedObject.setSharedInt(count);
}
System.err.println(getName()+"finished producing values"+"\nTerminating "+getName());
}
}
class ConsumeInteger extends Thread {
private HoldInteger sharedObject;
public ConsumeInteger(HoldInteger shared) {
super("ConsumeInterger");
sharedObject=shared;
}
public void run() {
int value,sum=0;
do {
try{
Thread.sleep((int)(Math.random()*3000));
} catch(InterruptedException exception) {
System.err.println(exception.toString());
}
value=sharedObject.getSharedInt();
sum+=value;
}while(value!=10);
System.err.println(getName()+"retrieved values totaling :"+sum+"\nTerminating "+getName());
}
}
class HoldInteger {
private int sharedInt=-1;
private boolean available=false;
public synchronized void setSharedInt(int value) {
while(available==true) {
try{
wait();
} catch(InterruptedException e) {}
}
System.err.println(Thread.currentThread().getName()+"setting sharedInt to"+value);
sharedInt=value;
available=true;
notifyAll();
}
public synchronized int getSharedInt() {
while(available==false) {
try {
wait();
}catch(InterruptedException e) {}
}
available=false;
System.err.println(Thread.currentThread().getName()+"retrieving sharedInt value"+sharedInt);
notifyAll();
return sharedInt;
}
}
/* class HoldInteger{
private int sharedInt=-1;
public void setSharedInt(int value){
System.out.println(Thread.currentThread().getName()+
"setting sharedInt to"+sharedInt);
sharedInt=value;
}
public int getSharedInt(){
System.err.println(Thread.currentThread().getName()+
"retrieving sharedInt value"+sharedInt);
return sharedInt;
}
} */
public class JLab0802 {
public static void main(String args[]){
HoldInteger sharedObject =new HoldInteger();
ProduceInteger producer =new ProduceInteger(sharedObject);
ConsumeInteger consumer=new ConsumeInteger(sharedObject);
producer.start();
consumer.start();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -