您的位置:首页 > 编程语言 > Java开发

Java基础多线程间通讯同步操作示例一(未优化):

2013-01-15 11:15 447 查看
class ThreadCommunicationDemo
{
public static void main(String[] args)
{
Resource resource = new Resource();

Input input = new Input(resource);
Output output = new Output(resource);

new Thread(input,"input thread").start();
new Thread(output,"output thread").start();
}
}

class Input implements Runnable
{
private Resource resource;
private boolean flag;
public Input(Resource resource)
{
this.resource = resource;
}

public void run()
{
while(true)
{
synchronized(resource)
{
try
{
if(resource.getFlag())
resource.wait();
if(flag)
{
resource.setName("zhangsan");
resource.setSex("nan");
}
else
{
resource.setName("lishi");
resource.setSex("nv");
}
resource.setFlag(true);
resource.notify();

}
catch(Exception e)
{
System.err.println(e.getMessage());
}
}

flag=!flag;
}
}

}

class Output implements Runnable
{
private Resource resource;

public Output(Resource resource)
{
this.resource = resource;
}

public void run()
{
while(true)
{
synchronized(resource)
{
try
{
if(!resource.getFlag())
resource.wait();

System.out.println(resource.getName() + " ... "+resource.getSex());
resource.setFlag(false);
resource.notify();
}
catch(Exception e)
{
System.err.println(e.getMessage());
}
}
}
}

}

class Resource
{
private String Name;
private String Sex;
private boolean Flag;

public String getName()
{
return this.Name;
}

public void setName(String Name)
{
this.Name = Name;
}

public String getSex()
{
return this.Sex;
}

public void setSex(String Sex)
{
this.Sex = Sex;
}

public Boolean getFlag()
{
return this.Flag;
}

public void setFlag(boolean Flag)
{
this.Flag = Flag;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: