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;
}
}
{
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;
}
}
相关文章推荐
- Java基础多线程间通讯示例操作(已优化)二:
- Java基础多线程通讯之生产者消费者模式示例:
- Java基础多线程间通讯之多生产者、多消费者模式示例:
- 黑马程序员_Java基础:实现多线程对共有数据的同步操作
- Java基础-多线程-③线程同步之synchronized
- 黑马程序员:Java基础总结----多线程安全性&同步
- 黑马程序员-18-java基础-多线程(1)-线程与同步
- Java基础-多线程-③线程同步之synchronized
- Java基础之多线程(二)--通讯、生产者消费者、停止、Jion方法
- Java基础多线程之线程中止示例:
- java语言基础(91)——多线程(同步方法解决线程安全问题)
- java-多线程-同步的优化
- Java_基础—多线程(同步代码块和同步方法)
- java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提
- 【Java基础】多线程中同步的两种解决方案
- Java基础-多线程-③线程同步之synchronized
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- java 多线程操作List,已经做了同步synchronized,还会有ConcurrentModificationException,知道为什么吗?
- 黑马程序员-Java基础-多线程间通讯
- (新手)java多线程基础知识——调度与同步