package duoxiancheng;
class ResUp
{
private String name;
private String sex;
boolean flag=false;
public synchronized void set(String name,String sex )//锁是this
{
if(flag)//搞清楚逻辑关系
{
this.name=name;
this.sex=sex;
this.flag=false;
this.notify();
try {
this.wait();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
public synchronized void put()//同步this锁
{
if(!flag)
{
System.out.println(this.name+" "+this.sex);
this.flag=true;
this.notify();
try {
this.wait();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
class PutUp implements Runnable
{
ResUp r;//建立引用,引用Res对象,对象属于Res;如果new就是建立对象,对象属于本类
PutUp(ResUp r)
{
this.r=r;
}
public void run()
{
int x=1;
while(true)//不断输入
{
if(x==1)
r.set("wanxi","nv");
else
r.set("陈鸿", "男");
x=(x+1)%2;
}
}
}
class OutUp implements Runnable
{
ResUp r;
OutUp(ResUp r)
{
this.r=r;
}
public void run()
{
while(true)//不断输出
r.put();
}
}
public class OutPut2 {
public static void main(String [] args)
{
ResUp r=new ResUp();
new Thread(new PutUp(r)).start();
new Thread(new OutUp(r)).start();
}
}
(多线程)OutPut2
最新推荐文章于 2017-03-23 21:47:04 发布