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多线程通信 例子的更多相关文章

  1. JAVA多线程通信

    JAVA多线程通信 package com.frank.thread; /** * author:pengyan * date:Jun 16, 2011 * file:ProducerAndCusto ...

  2. java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

     *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时 ...

  3. 【Java多线程通信】syncrhoized下wait()/notify()与ReentrantLock下condition的用法比较

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6556925.html  一:syncrhoized使用同一把锁的多个线程用通信实现执行顺序的调度 我们知道,使 ...

  4. java 多线程简单例子

    实现线程的方式是一,继承Thread类,重写父类的run()方法 二,实现接口Runnable中的run()方法. 下面是简单的例子 例子1:银行存取钱问题 package com.direct.de ...

  5. 【多线程】java多线程 测试例子 详解wait() sleep() notify() start() join()方法 等

    java实现多线程,有两种方法: 1>实现多线程,继承Thread,资源不能共享 2>实现多线程  实现Runnable接口,可以实现资源共享 *wait()方法 在哪个线程中调用 则当前 ...

  6. java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

    1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以 ...

  7. Java——多线程小例子

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  8. Java多线程学习——例子:模拟电影院抢座位

    Cinema——List<Integer>数据结构存储电影院座位 public class Cinema{ private List<Integer> seats; //剩余座 ...

  9. java多线程并发例子

    public static void main(String[] args) { for(Thread t:getThreads()){ t.start(); } } public static Th ...

随机推荐

  1. c++ map 使用

    . 包含头文件: #include <map> 2. 构造函数: std::map<char,int> first; first[; first[; first[; first ...

  2. Delphi_04_Delphi_Object_Pascal_基本语法_02

    这里简单的描述Object的语法中的基本内容,数据类型.因为代码是自描述的所以不废话,直接贴代码. { 用户自定义类型 1.数组 2.动态数组 3.记录 4.集合 } program UserDefi ...

  3. Windows消息机制

    Windows的消息系统是由3个部分组成的: · 消息队列.Windows能够为所有的应用程序维护一个消息队列.应用程序必须从消息队列中获取消息,然后分派给某个窗口.· 消息循环.通过这个循环机制应用 ...

  4. H5 WebSocket 如何和C#进行通信

    HTML5作为下一代的 Web 标准, 拥有许多引人注目的新特性,如 Canvas.本地存储.多媒体编程接口.WebSocket 等.WebSocket 在浏览器和服务器之间提供了一个基于 TCP 连 ...

  5. Placeholder如何换行

    使用js动态添加标签充,处理换行问题 var placeholder = 'This is a line \nthis should be a new line'; $('textarea').att ...

  6. Android无需申请权限拨打电话

    Android打电话有两种实现方法: 第一种方法,拨打电话跳转到拨号界面.源代码如下: Intent intent = new Intent(Intent.ACTION_DIAL); Uri data ...

  7. NSURLConnection学习笔记

    虽说现在都用三方库来获取网络数据,再不济也会用苹果官方的NSURLSession,但有些东西还是要先学会才有资格说不好不用,不是么? NSURLConnection发送请求是分为同步和异步两种方式的, ...

  8. iOS加密方式及解压缩文件

    Base64加密方式 Base64是一种加密方法,可逆的加密. Base64中的可打印字符包括字母A-Z.a-z.数字0-9,这样共有62个字符./ + 填充 = echo -n BC|base64 ...

  9. cstore_fdw的安装使用以及源码分析

    一.cstore_fdw的简介 https://github.com/citusdata/cstore_fdw,此外部表扩展是由citusdata公司开发,使用RC_file格式对数据进行列式存储. ...

  10. Scala初入

    何为Scala物 Scala为基于JVM虚拟机中的面向对象与函数式编程思想并且完全兼容Java的混合编程语言,可以是Scala与Java是同根同源的,既然Scala与JAVA都是基于JVM之上的编程语 ...