JavaSE 多线程 线程间通信— 等待唤醒机制
2016-08-26 10:36
411 查看
1.1等待唤醒机制原理图
<span style="font-family:FangSong_GB2312;">package ResourceDemo2;
/*
*
* 等待唤醒机制
* 涉及的方法:
* 1.wait():让线程处于冻结状态,被wait()的线程会被存储到线程池当中。
* 2,notify():唤醒线程池中的一个线程(任意的)。
* 3,notifyAll():唤醒线程池中的所有线程。
* 这些方法都必须定义在同步中,
* 因为这些方法是用于操作线程状态的方法,
* 必须要明确到底操作的是哪个锁上的线程。
*
*
*/
class Resource{
String name;
String sex;
boolean flag=false;
}
//输入
class Input implements Runnable{
Resource r;
Input(Resource r){
this.r=r;
}
// Object obj=new Object();
public void run(){
int x=0;
while (true) {
synchronized(r){//加上同步锁
if (r.flag)
try{r.wait();}catch(InterruptedException e){}//此处不规范,后续会解决这个问题
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;
// Object obj=new Object();
Output(Resource r){
this.r=r;
}
public void run(){
while (true){
synchronized (r){////加上同步锁(2)
if (!r.flag)
try{r.wait();}catch(InterruptedException e){}//此处不规范,后续会解决这个问题
System.out.println(r.name+"......"+r.sex);
r.flag=false;
r.notify();
}
}
}
}
public class ResourceDemo2 {
public static void main(String[] args) {
//创建资源
Resource r=new Resource();
//创建任务
Input in=new Input(r);
Output out=new Output(r);
//创建线程,执行路径
Thread t1=new Thread(in);
Thread t2=new Thread(out);
//开启线程
t1.start();
t2.start();
}
}</span>
<span style="font-family:FangSong_GB2312;">package ResourceDemo2;
/*
*
* 等待唤醒机制
* 涉及的方法:
* 1.wait():让线程处于冻结状态,被wait()的线程会被存储到线程池当中。
* 2,notify():唤醒线程池中的一个线程(任意的)。
* 3,notifyAll():唤醒线程池中的所有线程。
* 这些方法都必须定义在同步中,
* 因为这些方法是用于操作线程状态的方法,
* 必须要明确到底操作的是哪个锁上的线程。
*
*
*/
class Resource{
String name;
String sex;
boolean flag=false;
}
//输入
class Input implements Runnable{
Resource r;
Input(Resource r){
this.r=r;
}
// Object obj=new Object();
public void run(){
int x=0;
while (true) {
synchronized(r){//加上同步锁
if (r.flag)
try{r.wait();}catch(InterruptedException e){}//此处不规范,后续会解决这个问题
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;
// Object obj=new Object();
Output(Resource r){
this.r=r;
}
public void run(){
while (true){
synchronized (r){////加上同步锁(2)
if (!r.flag)
try{r.wait();}catch(InterruptedException e){}//此处不规范,后续会解决这个问题
System.out.println(r.name+"......"+r.sex);
r.flag=false;
r.notify();
}
}
}
}
public class ResourceDemo2 {
public static void main(String[] args) {
//创建资源
Resource r=new Resource();
//创建任务
Input in=new Input(r);
Output out=new Output(r);
//创建线程,执行路径
Thread t1=new Thread(in);
Thread t2=new Thread(out);
//开启线程
t1.start();
t2.start();
}
}</span>
相关文章推荐
- java多线程——线程间通信之线程等待唤醒机制
- java多线程(2):线程通信之生产者消费者模式及等待唤醒机制
- 24-多线程(线程间通信-等待唤醒机制)1 2图解 3 25-多线程(线程间通信-等待唤醒机制-代码优化)
- Java基础学习5_多线程(线程间通信--等待唤醒机制)
- 黑马程序员_JavaSE基础14 之 线程间通信 等待唤醒机制 多生产多消费者 ...
- 多线程__【线程间通信】【等待唤醒机制】【多生产多消费】【Lock&Condition接口】
- java多线程之 生产者和消费者 线程间通信 等待与唤醒机制
- (九)Java入门--多线程(4)线程通信--等待唤醒机制
- JavaSE 多线程 线程间通讯—等待唤醒机制代码优化(背下来)
- Java多线程四:线程间通信/等待唤醒机制
- Java多线程之线程通信生产者消费者模式及等待唤醒机制代码详解
- 多线程(线程间通信-等待唤醒机制及其代码优化)
- 多线程__【线程间通信】【等待唤醒机制】【多生产多消费】【Lock&Condition接口】
- 线程间通信 等待唤醒机制 wait notify notifyAll lock Condition唤醒 停止线程interrupt 守护线程setDaemon join yield
- 线程间通信--等待唤醒机制
- 线程间通信、等待唤醒机制、生产者消费者问题(Lock,Condition)、停止线程和守护线程、线程优先级
- java线程间通信_线程同步_等待唤醒机制
- 多线程之间的友好通信-等待唤醒机制
- 【多线程】【同步】【等待唤醒机制】【JDK1.5多线程】【线程优先级&常见方法】
- 线程间通信--等待唤醒机制