package awt;//Playing类 相当于缓冲区!加互斥的缓冲区;
public class Playing {
private int value ;
private boolean isEmpty = true; //互斥锁的标志(信号量);
//放值
synchronized void put(int i)
{
if(!isEmpty)
{
try
{
this.wait(5); //挂起,释放互斥锁,进入互斥锁的等待队列;
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
value = i;
isEmpty = false ;
this.notifyAll(); //唤醒其他线程,和wait匹配使用!
}
//取值
synchronized int get()
{
if(isEmpty)
{
try
{
this.wait(5); //挂起,释放互斥锁,进入互斥锁的等待队列;
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
isEmpty = true ;
this.notifyAll(); //唤醒其他线程,和wait匹配使用!
return value ;
}
public static void main(String[] args)
{
Playing play = new Playing(); //线程体的执行对象
(new Sender(play)).start();
(new Receiver(play)).start();
}
} //发牌线程;
class Sender extends Thread
{
private Playing play;
public Sender(Playing play)
{
this.play = play;
}
public void run()
{
for(int i = 1; i<=54;i++)
{
play.put(i);
System.out.println("Sender put:"+i);
}
}
}//收牌线程
class Receiver extends Thread
{
private Playing play;
public Receiver(Playing play)
{
this.play = play ;
}
public void sun()
{
for(int i = 1; i<=54;i++)
System.out.println("Receiver get: "+play.get());
}
}
public class Playing {
private int value ;
private boolean isEmpty = true; //互斥锁的标志(信号量);
//放值
synchronized void put(int i)
{
if(!isEmpty)
{
try
{
this.wait(5); //挂起,释放互斥锁,进入互斥锁的等待队列;
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
value = i;
isEmpty = false ;
this.notifyAll(); //唤醒其他线程,和wait匹配使用!
}
//取值
synchronized int get()
{
if(isEmpty)
{
try
{
this.wait(5); //挂起,释放互斥锁,进入互斥锁的等待队列;
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
isEmpty = true ;
this.notifyAll(); //唤醒其他线程,和wait匹配使用!
return value ;
}
public static void main(String[] args)
{
Playing play = new Playing(); //线程体的执行对象
(new Sender(play)).start();
(new Receiver(play)).start();
}
} //发牌线程;
class Sender extends Thread
{
private Playing play;
public Sender(Playing play)
{
this.play = play;
}
public void run()
{
for(int i = 1; i<=54;i++)
{
play.put(i);
System.out.println("Sender put:"+i);
}
}
}//收牌线程
class Receiver extends Thread
{
private Playing play;
public Receiver(Playing play)
{
this.play = play ;
}
public void sun()
{
for(int i = 1; i<=54;i++)
System.out.println("Receiver get: "+play.get());
}
}
解决方案 »
- Java正则表达式怎么验证输入的值必须为数字,不能为空,数值<1000???
- 问JAVA中树形菜单与下拉菜单的优劣
- ItemUnitList cannot be resolved to a type怎么解决了!请大牛指点!!
- 将数据集中的数据输出到文本*.txt中,要求每一个字段一行,应该怎么做.
- 关于classLoader getResourceAsStream的一个问题 急需解决
- 求助:ICMP在Java下的实现
- 1.如何将密码框中的文本(*)变为他的真实字符? 2.如何改变JTable某一单元格的颜色?
- Java Swing 的问题
- 如何打开jpanel???????、、、在线等待!!!!
- 把Java卸载后又重新安装了Java11.0.2之后Java还是原来的版本
- 初学java,两道简单的题目,想看看高手们怎么做.嘻嘻
- C/S模式应用的默认编码是什么?
检查你要唤醒的进程在等 的信号量或者试试notifyAll()