java 线程(七)等待与唤醒
package cn.sasa.demo5; public class Resources { private String name;
private boolean gender; //标记
public boolean flag;
//如果falg==true ,赋值完成
//如果flag==false 取值完成 public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} public boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
} private Resources() {}
public static final Resources resource = new Resources();
}
package cn.sasa.demo5; public class InputRunnable implements Runnable{
private Resources rs = Resources.resource;
@Override
public void run() {
int flag = 1000;
while(flag > 0) {
synchronized(rs) { //input 和 output 两个线程操作同一个数据源,必须保证同步锁是同一个锁
if(rs.flag) {
try {
rs.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(flag % 2 ==0) {
rs.setName("来福");
rs.setGender(true);
}else {
rs.setName("wangcai");
rs.setGender(false);
}
rs.flag=true;
rs.notify();
flag--;
}
}
}
/**
* 等待 唤醒机制
*
* input先拿到cup的执行资源,wait(),等待output输出
*
* output输出后,notify()唤醒input,自己再wait()
*
* input被唤醒后继续执行,执行完后,notify() output线程,自己再wait()
*/
}
package cn.sasa.demo5; public class OutputRunnable implements Runnable{ private Resources rs = Resources.resource;
@Override
public void run() {
int flag = 1000;
while(flag > 0) {
synchronized(rs) { //input 和 output 两个线程操作同一个数据源,必须保证同步锁是同一个锁
if(!rs.flag) {
try {
rs.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(rs.getName() + "======" + rs.isGender() );
rs.flag=false;
rs.notify();
flag--;
}
}
}
}
package cn.sasa.demo5; public class Test {
public static void main(String[] args) {
Runnable input = new InputRunnable();
Runnable output = new OutputRunnable();
new Thread(input).start();
new Thread(output).start();
}
}
java 线程(七)等待与唤醒的更多相关文章
- Java线程的等待与唤醒完整示例代码
项目结构: 资源类: 输入线程: 输出线程: 测试: 人妖问题发生: 线程安全问题的解决方法: 调用Object的wait()和notify()方法时需注意:必须是锁对象方可调用,否则将抛出无效的监 ...
- java多线程系类:基础篇:05线程的等待与唤醒
概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...
- Java并发编程之CountDownLatch,CyclicBarrier实现一组线程相互等待、唤醒
java多线程应用场景不少,有时自己编写代码又不太容易实现,好在concurrent包提供了不少实现类,还有google的guava包更是提供了一些最佳实践,这让我们在面对一些多线程的场景时,有了不少 ...
- 一 java线程的等待/通知模型
java 中线程之间的通信问题,有这么一个模型:一个线程修改了一个对象的值,而另一个线程感知到了变化,然后进行相应的操作,整个过程开始于一个线程,而最终执行又是另一个线程.前者是生产者,后者就是消费者 ...
- java线程的等待、通知机制【读书笔记】
代码示例: package com.baidu.nuomi.concurrent; import java.text.SimpleDateFormat; import java.util.Date; ...
- java线程中的notifyAll唤醒操作
注意: java中的notifyAll和notify都是唤醒线程的操作,notify只会唤醒等待池中的某一个线程,但是不确定是哪一个线程,notifyAll是针对指定对象里面的所有线程执行唤醒操作,指 ...
- java 线程同步方法执行与唤醒实例
账号提钱.存钱实例方法 public class Account { private int balance; private int maxBalance; public Account(int b ...
- 线程的等待与唤醒,实现if...else里面的值交互依次输出
线程通信原理图: 资源类: package com.yonyou.sci.gateway.exec.threadnet; public class Resource { String name; St ...
- Java线程(七):Callable和Future
转自:http://blog.csdn.net/ghsau/article/details/7451464 本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果. C ...
- Java线程新特征——Java并发库
一.线程池 Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定 ...
随机推荐
- Go_14:GoLang中 json、map、struct 之间的相互转化
1. golang 中 json 转 struct <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field).也就是说结构体的 key 对应的首字母 ...
- matlab中如何将视频保存成图像
利用MATLAB将视频的每一帧保存成一幅图像,并自动命名.本文方法简单,容易学习. 首先,读入视频.代码如下: mov = VideoReader('xxxxxx.avi'); % 将xxxxxx.a ...
- Go指南练习_图像
https://tour.go-zh.org/methods/25 一.题目描述 还记得之前编写的图片生成器吗?我们再来编写另外一个,不过这次它将会返回一个 image.Image 的实现而非一个数据 ...
- java-信息安全(十六)-双向认证
原文地址 http://snowolf.iteye.com/blog/510985 对于双向认证,做一个简单的描述. 服务器端下发证书,客户端接受证书.证书带有公钥信息,用于验证服务器端.对数据加密/ ...
- 20 go单元测试
单元测试 Go本身提供了一套轻量级的测试框架.符合规则的测试代码会在运行测试时被自动识别并执行.单元测试源文件的命名规则如下: 必须是以_test.go结尾的文件,比如manager_test.go ...
- [Node.js] 04 - Event and Callback
回调函数 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数. 异步读取文件的回调函数: var fs = require("fs&quo ...
- 《objective-c基础教程》学习笔记(二)—— for循环的基本应用
在上一篇博文中,我们介绍了如何开发前期的准备,以及简单的类型输出实例. 这篇博文,我要记录一个for循环输出的实例.并对此展开,改变成不同的三个小函数. int main(int argc, cons ...
- 04单例模式Singleton
一.什么是单例模式 单例模式是一种对象创建型模式,使用单例模式, 可以保证为一个类只生成唯一的实例对象.也就是说, 在整个程序空间中,该类只存在一个实例对象. 其实,GoF对单例模式的定义是:保证一个 ...
- Java基础复习笔记基本排序算法
Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...
- JavaScript 之 function函数及参数arguments
JavaScript用function关键字声明函数,可以用return返回值,也可以没有返回值. 建议:要么统一有返回值,要么统一都没有返回值,这样调试代码方便. 函数定义格式: function ...