zoukankan      html  css  js  c++  java
  • java多线程下如何调用一个共同的内存单元(调用同一个对象)

     1 /*
     2  * 关于线程下共享相同的内存单元(包括代码与数据)
     3  * ,并利用这些共享单元来实现数据交换,实时通信与必要的同步操作。
     4  * 对于Thread(Runnable target)构造方法创建的线程,轮到它来享用CPU资源时。
     5  * 目标对象就会自动调用接口中的run()方法
     6  * */
     7 
     8 /* ----------------举例子-------------------  */
     9 
    10 /* 
    11  *  使用Thread类创建两个模拟猫和狗的线程,猫和狗共享房屋中的一桶水,即房屋是线程的目标对象
    12  * ,房屋中的一桶水被猫和狗共享。猫和狗轮流喝水(狗大喝水多,猫小喝水少),当谁被喝尽时,猫和狗进入
    13  * 死亡状态,猫和狗进入死亡状态。猫和狗在轮流喝水的过程中,主动休息片刻(让THread类调用Sleep(int n))
    14  * 进入中断状态),而不是等到被强制中断喝水。
    15  **/
    16 package DEMO;
    17 
    18 public class EXample12_3 {
    19     
    20     public static void main( String args [] )
    21     {
    22         House house = new House();
    23         house.setWater(10);
    24         Thread dog,cat ;
    25         dog = new Thread(house);  //dog和cat的目标对象相同
    26         cat = new Thread(house);
    27         dog.setName("");
    28         dog.setName("");
    29         dog.start();
    30         cat.start();
    31     }   
    32 }
    33 
    34 class House implements Runnable
    35 {
    36     int WaterAmount ;       
    37     
    38     public void setWater(int w)
    39     {
    40        WaterAmount = w;       
    41     }
    42     public void run() {
    43       // TODO Auto-generated method stub
    44        while(true)
    45       {
    46           String name =Thread.currentThread().getName();
    47          if(name.equals(""))
    48          {
    49               System.out.println(name+"喝水");
    50              WaterAmount =WaterAmount-2;
    51          }
    52       else
    53           if(name.equals(""))
    54          {
    55             System.out.println(name+"喝水");
    56             WaterAmount=WaterAmount-1;
    57          }
    58      
    59       System.out.println(""+WaterAmount);
    60       try {
    61         Thread.sleep(2000);       //间隔时间
    62     } catch (InterruptedException e) {
    63         // TODO Auto-generated catch block
    64         e.printStackTrace();
    65     }
    66       if(WaterAmount<=0)  return ;
    67     }
    68 }
    69 }

    /*
    需要注意的是: 一个线程的run方法的执行过程中可能随时被强制中断(特别是对于双核系统的计算机)
    */
  • 相关阅读:
    php查看网页源代码的方法
    php阻止网页被用户频繁刷新
    php实现只保留mysql中最新1000条记录
    php限定时间内同一ip只能访问一次
    emmet插件快捷键:
    抓包工具--Fiddler
    HTTP版本进化过程
    ECMAScript6的Promise对象
    H5、CSS3属性的支持性以及flex
    关于未来前端的规划
  • 原文地址:https://www.cnblogs.com/gongxijun/p/3885859.html
Copyright © 2011-2022 走看看