Java 线程间通讯
/*
线程间通讯:
多个线程在处理同一资源,但是任务却不同。
*/ package com.cwcec.test; class Input implements Runnable
{
Resource r;
public Input(Resource r)
{
this.r = r;
}
public void run()
{
int x = 0;
while(true)
{
synchronized (r)
{
if(x == 0)
{
r.name = "Mike";
r.sex = "nan";
}
else
{
r.name = "丽丽";
r.sex = "女";
}
x = (x + 1) % 2;
} }
}
} class Output implements Runnable
{
Resource r;
public Output(Resource r)
{
this.r = r;
}
public void run()
{
while(true)
{
synchronized (r)
{
System.out.println(r.name + "..." + r.sex);
} }
}
} class Resource
{
String name;
String sex;
} public class Person
{
public static void main(String[] args)
{ Resource r = new Resource();
Input in = new Input(r);
Output output = new Output(r); Thread t1 = new Thread(in);
Thread t2 = new Thread(output); t1.start();
t2.start();
}
}
class Input implements Runnable
{
Resource r;
public Input(Resource r)
{
this.r = r;
}
public void run()
{
int x = 0;
while(true)
{
synchronized (r)
{
if(r.flag)
{
try {
r.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} if(x == 0)
{
r.name = "Mike";
r.sex = "nan";
}
else
{
r.name = "丽丽";
r.sex = "女";
} r.flag = true;
r.notify();
}
x = (x + 1) % 2; }
}
} class Output implements Runnable
{
Resource r;
public Output(Resource r)
{
this.r = r;
}
public void run()
{
while(true)
{
synchronized (r)
{
if(!r.flag)
try {
r.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(r.name + "..." + r.sex);
r.flag = false;
r.notify();
}
}
}
} class Resource
{
String name;
String sex;
boolean flag = false;
} public class Person
{
public static void main(String[] args)
{ Resource r = new Resource();
Input in = new Input(r);
Output output = new Output(r); Thread t1 = new Thread(in);
Thread t2 = new Thread(output); t1.start();
t2.start();
}
}
class Input implements Runnable
{
Resource r;
public Input(Resource r)
{
this.r = r;
}
public void run()
{
int x = 0;
while(true)
{
if(x == 0)
{
r.set("Mike", "nan");
}
else
{
r.set("丽丽", "女");
} x = (x + 1) % 2; }
}
} class Output implements Runnable
{
Resource r;
public Output(Resource r)
{
this.r = r;
}
public void run()
{
while(true)
{
r.out();
}
}
} class Resource
{
private String name;
private String sex;
private boolean flag = false;
public synchronized void set(String name,String sex)
{
if(flag)
try {
this.wait();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
this.name = name;
this.sex = sex;
flag = true;
this.notify();
} public synchronized void out()
{
if(!flag)
try {
this.wait();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
System.out.println(name + "...+" + sex);
flag = false;
this.notify();
} } public class Person
{
public static void main(String[] args)
{ Resource r = new Resource();
Input in = new Input(r);
Output output = new Output(r); Thread t1 = new Thread(in);
Thread t2 = new Thread(output); t1.start();
t2.start();
}
}
Java 线程间通讯的更多相关文章
- Java 线程间通讯(共享变量方式)
Java线程间通讯,最常用的方式便是共享变量方式,多个线程共享一个静态变量就可以实现在线程间通讯,但是这需要注意的就是线程同步问题. 一.没考虑线程同步: package com.wyf; publi ...
- Java 线程间通讯(管道流方式)
一.管道流是JAVA中线程通讯的常用方式之一,基本流程如下: 1)创建管道输出流PipedOutputStream pos和管道输入流PipedInputStream pis 2)将pos和pis匹配 ...
- JMM之Java线程间通讯——等待通知机制及其经典范式
在并发编程中,实际处理涉及两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体). 通信是指线程之间以何种机制来交换信息.在共享内存的并发模型里,线程之间共享程序的公共状 ...
- java 并发性和多线程 -- 读感 (二 线程间通讯,共享内存的机制)
参考文章:http://ifeve.com/java-concurrency-thread-directory/ 其中的竞态,线程安全,内存模型,线程间的通信,java ThreadLocal类小节部 ...
- 黑马程序员——JAVA基础之多线程的线程间通讯等
------- android培训.java培训.期待与您交流! ---------- 线程间通讯: 其实就是多个线程在操作同一个资源,但是动作不同. wait(); 在其他线程调用此对象的notif ...
- (转载)Java里快如闪电的线程间通讯
转自(http://www.infoq.com/cn/articles/High-Performance-Java-Inter-Thread-Communications) 这个故事源自一个很简单的想 ...
- Java中快如闪电的线程间通讯
这个故事源自一个很简单的想法:创建一个对开发人员友好的.简单轻量的线程间通讯框架,完全不用锁.同步器.信号量.等待和通知,在Java里开发一个轻量.无锁的线程内通讯框架:并且也没有队列.消息.事件或任 ...
- Java 里快如闪电的线程间通讯
这个故事源自一个很简单的想法:创建一个对开发人员友好的.简单轻量的线程间通讯框架,完全不用锁.同步器.信号量.等待和通知,在Java里开发一个轻量.无锁的线程内通讯框架:并且也没有队列.消息.事件或任 ...
- 【转】JAVA 并发性和多线程 -- 读感 (二 线程间通讯,共享内存的机制)
原文地址:https://www.cnblogs.com/edenpans/p/6020113.html 参考文章:http://ifeve.com/java-concurrency-thread-d ...
随机推荐
- C语言学习记录_2019.02.09
打印字符串:%s--------printf("%s","abcd"); 打印字符串数组中某一位:%c--------printf("%c" ...
- 时间戳转为C#格式时间
经常发现很多地方使用一个时间戳表示时间.比如: 1370838759 表示 2013年6月10日 12:32:39. 我们就需要一个工具,方便地转换这种时间格式 什么是时间戳? 时间戳, 又叫Unix ...
- 2017-2018-1 20155320 第五周 加分题-mybash的实现
2017-2018-1 20155320 第五周 加分题-mybash的实现 使用fork,exec,wait实现mybash 写出伪代码,产品代码和测试代码 发表知识理解,实现过程和问题解决的博客( ...
- 2017战略No.1:坚定不移地走全产业链发展路线
编者按:2016年9月9日,首次公开表达"我想走全产业链发展路线"的想法. 这几个月,认真思考了下这个决定背后的原因.目的和价值. 付出常人5倍以上的努力,先抓住"技术研 ...
- callable(object)
callable(object) 中文说明:检查对象object是否可调用.如果返回True,object仍然可能调用失败:但如果返回False,调用对象ojbect绝对不会成功. 注意:类是可调用的 ...
- 常见面试算法题JS实现-设计一个有getMin功能的栈
前言: 已经确定工作了-下周一正式入职,按理说应该是可以好好浪荡一周的,但是内心总是不安,总觉得自己这个水平真的太菜了,还是趁着现在有自己的时间,赶紧多看看书,多学习学习吧orz所以把之前校招买的书, ...
- 虚拟机下安装cad2006和南方cass7.0
本人电脑是win10系统,装了一个cad2014,cad2014没有与之匹配的cass版本,但cad2014也有用途,于是上网找两个cad版本都安装的教程,发现一个比较好的办法就是安装虚拟机,在虚拟机 ...
- 阿里云Linux的mysql安装,使用yum安装
1.下载 我下载的mysql5.7 rpm格式的,在Linux的根目录下下载(防止出现安装的问题) wget https://dev.mysql.com/get/mysql57-community-r ...
- python中@property和property函数使用
1.基本的@property使用,可以把函数当做属性用 class Person(object): @property def get_name(self): print('我叫xxx') def m ...
- Unity中使用C#实现UDP广播
没有系统的学习过网络,想做联机游戏还真是费劲,想做在局域网内实现自动搜索服务器的功能,然后就想到了使用UDP进行广播,把服务器的信息广播给每一个玩家. Socket udpSocket = new S ...