📄 synimp.java
字号:
/**类SynImp用于共享数据资源,该类加入了同步控制机制,控制同一时刻只有一个线程取出数据和写入数据*/
class SynImp{
/*定义一个成员变量index,用于控制数据的读写操作*/
private int index = 0;
/*声明一个整型数组,用来存放共享数据*/
private int[] data = new int[4];
/**方法popup()用于从共享数据中取出数据*/
public synchronized int popup(){
/*如果index为0,表示存放共享数据的数组中已经没有共享数据,将当前线程放入wait队列,并释放持有的互斥锁*/
while(index==0){
try{
this.wait();
}catch(InterruptedException e){
}
}
/*当index不为0时,将线程从wait队列中唤醒,并将线程移入互斥锁申请队列*/
this.notify();
/*将index减一,以返回正确的值*/
index--;
return data[index];
}
/**push(int temp)方法用于向共享数据数组中写入数据*/
public synchronized void push(int temp){
/*while循环用于处理当前数组中数据已满的情况*/
while(index==data.length){
try{
/*当数据已满时,让当前线程进入wait队列,并释放互斥锁*/
this.wait();
/*输出数组表示的数据堆栈中最上面的数据元素*/
System.out.println("data["+index+"]: "+data[index]);
}catch(InterruptedException e){
}
}
/*如果数据未满,将线程唤醒,并将线程移入互斥锁申请队列*/
this.notify();
/*设置index位置上的数据元素*/
data[index]=temp;
/*使index加一,以进行下一次处理*/
index++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -