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 ...
随机推荐
- C# - 多线程 之 Process与Thread与ThreadPool
Process 进程类, // 提供对本地和远程进程的访问,启动/停止本地系统进程 public class Process : Component { public int Id { get; } ...
- 计算(LnN!)的值
import java.util.*;import java.math.*;public class CaculatorLnN { public static void main(String[] a ...
- PHP 单例模式
一.什么是单例模式? 1.含义 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. 2. ...
- 9.6 MongoDB一
目录:ASP.NET MVC企业级实战目录 9.6.1 MongoDB简介 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统 ...
- Java三大框架之——Hibernate关联映射与级联操作
什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...
- js获取页面url
设置或获取对象指定的文件名或路径. window.location.pathname例:http://localhost:8086/topic/index?topicId=361alert(windo ...
- 事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序
一直想弄清楚onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent的执行顺序,以及内部使用switch (event.getAction())中的执 ...
- Android版本和API Level对应关系
http://developer.android.com/guide/topics/manifest/uses-sdk-element.html Platform Version API ...
- 原创 C++应用程序在Windows下的编译、链接(四)动态链接
4动态链接 4.1概述 在静态链接阶段,链接器为PE文件生成了导入表,导出表,符号表,并调整了Call指令后面的操作数,在程序调用的时候,能够直接地或者间接地定位到IAT中的某个位置,在PE文件中,该 ...
- 高级数据过滤(like)
单字符过滤 '_' select * from T_Employee where FName like '_erry' 多字符过滤 '%' select * from T_Employee wher ...