zoukankan      html  css  js  c++  java
  • java多线程通信 例子

     1 package com.cl.www.thread;
     2 
     3 public class NumberHolder {
     4     
     5     private Integer number = 0;
     6     
     7     // 增加number
     8     public synchronized void increaseNum(){
     9         //不是0就不加
    10         while(number != 0){   
    11             try {
    12                 this.wait();
    13             } catch (InterruptedException e) {
    14                 e.printStackTrace();
    15             }
    16         }
    17         number++;
    18         System.out.println("number的值为:"+number);
    19         this.notifyAll(); //通知其它线程
    20     }
    21     
    22     //减少number
    23     public synchronized void decreaseNum(){
    24         //如果等于0就不减少
    25         while(number == 0){
    26             try {
    27                 this.wait();
    28             } catch (InterruptedException e) {
    29                 e.printStackTrace();
    30             }
    31         }
    32         number--;
    33         System.out.println("number的值为:"+number);
    34         this.notifyAll(); //通知其它线程
    35     }
    36 }
     1 package com.cl.www.thread;
     2 /**
     3  * 
     4  * 增加number
     5  */
     6 public class IncreaseThread implements Runnable{
     7     
     8     private NumberHolder numberHolder;
     9     
    10     public IncreaseThread(NumberHolder numberHolder) {
    11         this.numberHolder = numberHolder;
    12     }
    13 
    14     @Override
    15     public void run() {
    16         int i = 0;
    17         while(i<10){
    18             try {
    19                 Thread.sleep(1000);
    20             } catch (InterruptedException e) {
    21                 e.printStackTrace();
    22             }
    23             numberHolder.increaseNum();
    24             i++;
    25         }
    26     }
    27 }
     1 package com.cl.www.thread;
     2 
     3 /**
     4  * 减少number
     5  *
     6  */
     7 public class DecreaseThread implements Runnable{
     8     
     9     private NumberHolder numberHolder;
    10     
    11     public DecreaseThread(NumberHolder numberHolder) {
    12         
    13         this.numberHolder = numberHolder;
    14     }
    15     @Override
    16     public void run() {
    17         int i =0;
    18         while(i<10){
    19             try {
    20                 Thread.sleep((long)Math.random()*1000);
    21             } catch (InterruptedException e) {
    22                 e.printStackTrace();
    23             }
    24             numberHolder.decreaseNum();
    25             i++;
    26         }
    27     }
    28 }
     1 package com.cl.www.thread;
     2 
     3 public class MainTest {
     4     public static void main(String[] args) {
     5         
     6         NumberHolder numberHolder = new NumberHolder();
     7         
     8         IncreaseThread increaseThread = new IncreaseThread(numberHolder);
     9         DecreaseThread decreaseThread = new DecreaseThread(numberHolder);
    10         
    11         Thread th1 = new Thread(increaseThread);   // 加 number
    12         Thread th2 = new Thread(decreaseThread);   // 减 number
    13         
    14         Thread th3 = new Thread(increaseThread);    // 加 number
    15         Thread th4 = new Thread(decreaseThread);    // 减 number
    16         
    17         th1.start();
    18         th2.start();
    19         
    20         th3.start();
    21         th4.start();
    22     }
    23 }

    输出结果

  • 相关阅读:
    android animation
    android手机屏幕分辨率 及 sp dip(dp) px 区别 及高中低分辨率时处理
    android ExpandableListView
    android ImageView 之 android:scaleTye=" "
    android popupwindow
    如何使用 TransactSQL 编写作业脚本(企业管理器)
    线程访问临界区的问题 实例,需解决
    企业信息化
    使用Installshield制作asp,asp.net应用的安装程序
    Linux 系统目录结构
  • 原文地址:https://www.cnblogs.com/c9999/p/6249702.html
Copyright © 2011-2022 走看看