专栏首页mljava多线程下如何调用一个共同的内存单元(调用同一个对象)

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方法的执行过程中可能随时被强制中断(特别是对于双核系统的计算机)
*/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • javaSE之线程联合

            首先定义 : 一个线程A在占有CPU资源期间 ,可以让其他线程调用join()和本线程联合。    嗯哈,像书本这个列子:           ...

    Gxjun
  • 编程之美--2. Trie树 (Trie图)

    #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编...

    Gxjun
  • poj----Ubiquitous Religions

    Ubiquitous Religions Time Limit: 5000MS Memory Limit: 65536K Total Submi...

    Gxjun
  • 域渗透 | Kerberos攻击速查表

    使用ticket_converter.py在Linux / Windows格式之间转换tickets:

    Bypass
  • 零基础学习 Python 之封装

    今天来讲 OOP 的最后一个特性:「封装」。封装是对具体对象的一种抽象,简单来说就是将某些部分隐藏起来,在程序外部看不到,这个看不到不是说人用眼睛看不到那个代码...

    Rocky0429
  • 柯洁将在年内和“阿尔法狗”进行终极人机大战

    大数据文摘
  • 重叠(Overlapped)IO模型

    基本思想:允许应用程序使用重叠数据结构一次投递一个或者多个异步IO请求。 提交IO请求完成后,与之关联的重叠数据结构中的事件对象受信,应用程序便可使用WSAVe...

    用户1154259
  • 美出口禁令影响下,芯片公司雇佣中国员工越来越难了

    据华尔街日报报道,为了保护本土技术知识产权,美国正在放缓国内半导体公司雇佣中国公民从事高级工程师的审批进度。

    大数据文摘
  • 2014年智能硬件十大行业里程碑事件

    以Google Glass为源头的智能硬件,2012年发源、2013年酝酿、2014年爆发,在即将过去的2014年,雷科技进行Smart2014的系列盘点,围...

    罗超频道
  • Struts2的工作原理

    在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处?

    Java架构师历程

扫码关注云+社区

领取腾讯云代金券