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

转载于:https://www.cnblogs.com/gongxijun/p/3885859.html

java多线程下如何调用一个共同的内存单元(调用同一个对象)相关推荐

  1. Java多线程下载网图

    Java多线程下载网图案例 此案例依赖--文件操作工具类(FileUtils) 使用 apache 的commons-io包下的FileUtilsimportorg.apache.commons.io ...

  2. java多线程下LongAdder、CountDownLatch、CyclicBarrier、Phaser 的用法

    前言 一文读懂java多线程下常用常考的阻塞方法LongAdder.CountDownLatch.CyclicBarrier.Phaser 包含演示代码 高并发模拟,性能比较实例代码 前言 LongA ...

  3. JAVA多线程下高并发的处理经验

    java中的线程:java中,每个线程都有一个调用栈存放在线程栈之中,一个java应用总是从main()函数开始运行,被称为主线程.一旦创建一个新的线程,就会产生一个线程栈.线程总体分为:用户线程和守 ...

  4. 【JAVA多线程】如何解决一个生产者与消费者问题

    如何解决一个生产者与消费者问题 生产者与消费者问题是多线程同步的一个经典问题.生产者和消费者同时使用一块缓冲区,生产者生产商品放入缓冲区,消费者从缓冲区中取出商品.我们需要保证的是,当缓冲区满时,生产 ...

  5. java 多线程 聊天_Java做一个多线程类似于QQ的聊天程序。

    展开全部 //时间关系,粗略的做了一下,一个模拟UDP协议的测试,图标,IP,以及端口都可以设成 //发送者端的电脑参数32313133353236313431303231363533e78988e6 ...

  6. java无法注册监听器_(1507—79)在Java事件处理中,一个组件只能注册唯一的监听器对象。...

    处件只监听按照不同途的和用结构. 理中全代能不偿期肾功. 外周为主血红细胞细胞以小,个组板3血小,中央浅染区扩大,女性,血红蛋白查:,增多年来月经近半,岁.包括性呼吸衰低氧发病急性竭的机制.脱垂括:子 ...

  7. 多线程抢票_java多线程下模拟抢票

    我们设置三个对象分别同时抢20张票,利用多线程实现. public class Web123506 implements Runnable{ private int ticteksNums=20;// ...

  8. Java多线程的同步机制(synchronized)

    一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在 java里边就是拿到某个同步对象的锁(一个对象只有一把锁): 如果这个时候同步对象的锁被其他线程拿走了,他(这个 ...

  9. java多线程之线程的同步与锁定(转)

    一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. publicc ...

  10. Java多线程超详细总结

    目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么 ...

最新文章

  1. 程序员面试题100题第29题——调整数组顺序使奇数位于偶数前面
  2. SWIFT入门 Dictionary
  3. springboot2.3.4集成EhCache缓存框架完整代码
  4. MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
  5. 解决NF4网卡网刻速度问题
  6. corefx 源码学习:SqlClient 是如何同步建立 Socket 连接的
  7. 2017西安交大ACM小学期 刁钻的顾客[3进制+折半枚举]
  8. Android 创世纪 第二天
  9. python 写csv scrapy_Python神技能 | 使用爬虫获取汽车之家全车型数据
  10. mysql5.6.22编译安装教程_Linux CentOS6.0下编译安装MySQL 5.6.22
  11. 助力小程序生态发展 “小程序生态孵化社区”成立
  12. java kettle 日志 log_kettle使用log4j管理输出日志
  13. android 高音质 播放器,安卓音质最强音乐播放器—Rockbox
  14. 文本聚类分析算法_常用的聚类分析算法
  15. 为Ubuntu安装中文语言包
  16. python如何打开文件选择框_python文件选择对话框的操作方法
  17. java毕业设计产品销售管理系统Mybatis+系统+数据库+调试部署
  18. echarts饼状图
  19. #pragma comment
  20. Android模拟器网络连接问题解决,解决小蚁安卓模拟器网络异常无法连接的方法...

热门文章

  1. 征集 | AAAI 2021线下论文预讲会讲者征集
  2. 【Linux】详解Linux中3个文件查找相关命令
  3. Nothing is impossible!——致敬Uzi
  4. 每日算法系列【LeetCode 825】适龄的朋友
  5. python基础7-函数
  6. 李宏毅自然语言处理——成分句法分析
  7. 对测试认识的三个阶段
  8. assert()和panic()
  9. 监督学习的分类:判别/生成模型,概率/非概率模型、参数/非参数模型
  10. keras从dataframe中读取数据并进行数据增强进行训练(分类+分割)