//有一个数据存储空间,划分为两部分,一部分用于存储人的姓名,另外一部分用于存储人的性别。
//创建两个线程,一个用于向数据存储空间添加数据,另一个线程从数据存储空间取出数据
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Q q=new Q();
Consumer con=new Consumer(q);
Producer pro=new Producer(q);
new Thread(con).start();
new Thread(pro).start();
}
}
class Q
{
private String name;
private String sex;
private boolean flag=false;
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
class Consumer implements Runnable //从Q中向外读取的一个线程;
{
private Q q;
public Consumer(Q q)
{
this.q=q;
}
public void run() {
// TODO Auto-generated method stub
while(true)
{
synchronized(q)
{
if(!q.isFlag())
try {
q.wait(); //读取的线程等待
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(q.getName()+":"+q.getSex());
q.notify(); //唤醒插入的线程
q.setFlag(false);
}
}
}
}
class Producer implements Runnable //向Q中插入的一个线程;
{
private Q q;
private int i=0;
public Producer(Q q)
{
this.q=q;
}
public void run() {
// TODO Auto-generated method stub
while(true)
{
synchronized(q)
{
if( q.isFlag())
try {
q.wait();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(i%2==0)
{
q.setName("zhangsan");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
q.setSex("male");
}
else
{
q.setName("lisi");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
q.setSex("female");
}
q.notify(); //唤醒读取的线程
q.setFlag(true);
}
i++;
}
}
分享到:
相关推荐
WinForm后台线程与UI线程通讯 实现进度条变化
VC多线程通讯VC多线程通讯
Qt做的一个DEMO,用信号槽实现多线程通讯,主线程写入参数,子线程处理完发给主线程
第一节(多线程通讯代码演示及解决线程安全问题)
c#编写串口通讯代码多线程实现,逻辑与界面分离。发送与接收都为单独线程
多线程UDP通讯例子多线程UDP通讯例子多线程UDP通讯例子多线程UDP通讯例子多线程UDP通讯例子
这是一个从工作进程往界面线程发送消息控制界面进度条显示和工作线程建立消息堆栈提取消息的程序
多线程串口通讯实例源码分析,主要是在windows下 用MFC编程 实现excel读数据
在开发串口通讯的时候一直用的微软的,顺序执行,后来找到一个可以用多线程的帮组类,共享给大家,本人测试过xmodel都可以使用 ,调试也很方便,
多线程的线程同步,线程通讯,Lock锁
基于Socket通讯的服务器端,添加多线程,可以支持多个客户端同时连接,发送消息。
Socket通讯,多线程,有客户端服务器
串口通信的实现,编程环境为C#,实现技术采用了多线程方式
C#.net同步异步SOCKET通讯和多线程总结~
android 线程间通讯
本文介绍多线程间通讯的基本知识,并带有源代码。
Java tcp通讯,运用多线程,一个服务端与多个客户端进行交互
多线程编程之三——线程间通讯
C# socket多线程通讯 含客户端,亲测可以用,学习的例子。