java多线程通信 例子
package com.cl.www.thread;
public class NumberHolder {
private Integer number = 0;
// 增加number
public synchronized void increaseNum(){
//不是0就不加
while(number != 0){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
number++;
System.out.println("number的值为:"+number);
this.notifyAll(); //通知其它线程
}
//减少number
public synchronized void decreaseNum(){
//如果等于0就不减少
while(number == 0){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
number--;
System.out.println("number的值为:"+number);
this.notifyAll(); //通知其它线程
}
}
package com.cl.www.thread;
/**
*
* 增加number
*/
public class IncreaseThread implements Runnable{ private NumberHolder numberHolder; public IncreaseThread(NumberHolder numberHolder) {
this.numberHolder = numberHolder;
} @Override
public void run() {
int i = 0;
while(i<10){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
numberHolder.increaseNum();
i++;
}
}
}
package com.cl.www.thread; /**
* 减少number
*
*/
public class DecreaseThread implements Runnable{ private NumberHolder numberHolder; public DecreaseThread(NumberHolder numberHolder) { this.numberHolder = numberHolder;
}
@Override
public void run() {
int i =0;
while(i<10){
try {
Thread.sleep((long)Math.random()*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
numberHolder.decreaseNum();
i++;
}
}
}
package com.cl.www.thread;
public class MainTest {
public static void main(String[] args) {
NumberHolder numberHolder = new NumberHolder();
IncreaseThread increaseThread = new IncreaseThread(numberHolder);
DecreaseThread decreaseThread = new DecreaseThread(numberHolder);
Thread th1 = new Thread(increaseThread); // 加 number
Thread th2 = new Thread(decreaseThread); // 减 number
Thread th3 = new Thread(increaseThread); // 加 number
Thread th4 = new Thread(decreaseThread); // 减 number
th1.start();
th2.start();
th3.start();
th4.start();
}
}
输出结果

java多线程通信 例子的更多相关文章
- JAVA多线程通信
JAVA多线程通信 package com.frank.thread; /** * author:pengyan * date:Jun 16, 2011 * file:ProducerAndCusto ...
- java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)
*java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时 ...
- 【Java多线程通信】syncrhoized下wait()/notify()与ReentrantLock下condition的用法比较
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6556925.html 一:syncrhoized使用同一把锁的多个线程用通信实现执行顺序的调度 我们知道,使 ...
- java 多线程简单例子
实现线程的方式是一,继承Thread类,重写父类的run()方法 二,实现接口Runnable中的run()方法. 下面是简单的例子 例子1:银行存取钱问题 package com.direct.de ...
- 【多线程】java多线程 测试例子 详解wait() sleep() notify() start() join()方法 等
java实现多线程,有两种方法: 1>实现多线程,继承Thread,资源不能共享 2>实现多线程 实现Runnable接口,可以实现资源共享 *wait()方法 在哪个线程中调用 则当前 ...
- java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)
1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以 ...
- Java——多线程小例子
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- Java多线程学习——例子:模拟电影院抢座位
Cinema——List<Integer>数据结构存储电影院座位 public class Cinema{ private List<Integer> seats; //剩余座 ...
- java多线程并发例子
public static void main(String[] args) { for(Thread t:getThreads()){ t.start(); } } public static Th ...
随机推荐
- VS2012程序打包部署详解
VS2012没有自带打包工具,所以要先下载并安装一个打包工具.我采用微软提供的打包工具: InstallShield2015LimitedEdition.下载地址:https://msdn.micr ...
- Node.js写文件的三种方法
Node.js写文件的三种方式: 1.通过管道流写文件 采用管道传输二进制流,可以实现自动管理流,可写流不必当心可读流流的过快而崩溃,适合大小文件传输(推荐) var readStream = fs. ...
- CDN模式介绍
body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; } CDN(content delivery networ ...
- Javaweb项目框架搭建-准备篇
前言Java从大二开始学习到现在大四也有差不多两年了,但是由于之前一直在玩,没有认真学过,直到现在才开始重新学习.也是很凑巧,看到了黄勇老师的<架构探险>,于是便开始学习写Java Web ...
- Android 手机卫士10--应用管理器
1.添加不同类型条目 class MyAdapter extends BaseAdapter{ //获取数据适配器中条目类型的总数,修改成两种(纯文本,图片+文字) @Override public ...
- Windows消息机制
Windows的消息系统是由3个部分组成的: · 消息队列.Windows能够为所有的应用程序维护一个消息队列.应用程序必须从消息队列中获取消息,然后分派给某个窗口.· 消息循环.通过这个循环机制应用 ...
- CentOS7安装docker
1. 查看系统版本 $ cat /etc/redhat-release 2. 安装docker $ yum install docker 3.检查安装是否成功$ docker version 若 ...
- mac 抓包工具charles v3.9.3 安装破解步骤
一.下载 先到它的官网http://www.charlesproxy.com/可下载到最新版本,这个下载有点慢,我已经将它放到网盘中了:http://pan.baidu.com/s/1skTXRIl ...
- SQL:执行顺序
SELECT语句的执行的逻辑查询处理步骤: (8)SELECT (9)DISTINCT(11)<TOP_specification> <select_list>(1)FROM ...
- python-copy模块使用
浅拷贝 import copy dic = { "cpu":[80,], "mem":[80,], "disk":[80,] } print ...