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方法的执行过程中可能随时被强制中断(特别是对于双核系统的计算机) */
转载于:https://www.cnblogs.com/gongxijun/p/3885859.html
java多线程下如何调用一个共同的内存单元(调用同一个对象)相关推荐
- Java多线程下载网图
Java多线程下载网图案例 此案例依赖--文件操作工具类(FileUtils) 使用 apache 的commons-io包下的FileUtilsimportorg.apache.commons.io ...
- java多线程下LongAdder、CountDownLatch、CyclicBarrier、Phaser 的用法
前言 一文读懂java多线程下常用常考的阻塞方法LongAdder.CountDownLatch.CyclicBarrier.Phaser 包含演示代码 高并发模拟,性能比较实例代码 前言 LongA ...
- JAVA多线程下高并发的处理经验
java中的线程:java中,每个线程都有一个调用栈存放在线程栈之中,一个java应用总是从main()函数开始运行,被称为主线程.一旦创建一个新的线程,就会产生一个线程栈.线程总体分为:用户线程和守 ...
- 【JAVA多线程】如何解决一个生产者与消费者问题
如何解决一个生产者与消费者问题 生产者与消费者问题是多线程同步的一个经典问题.生产者和消费者同时使用一块缓冲区,生产者生产商品放入缓冲区,消费者从缓冲区中取出商品.我们需要保证的是,当缓冲区满时,生产 ...
- java 多线程 聊天_Java做一个多线程类似于QQ的聊天程序。
展开全部 //时间关系,粗略的做了一下,一个模拟UDP协议的测试,图标,IP,以及端口都可以设成 //发送者端的电脑参数32313133353236313431303231363533e78988e6 ...
- java无法注册监听器_(1507—79)在Java事件处理中,一个组件只能注册唯一的监听器对象。...
处件只监听按照不同途的和用结构. 理中全代能不偿期肾功. 外周为主血红细胞细胞以小,个组板3血小,中央浅染区扩大,女性,血红蛋白查:,增多年来月经近半,岁.包括性呼吸衰低氧发病急性竭的机制.脱垂括:子 ...
- 多线程抢票_java多线程下模拟抢票
我们设置三个对象分别同时抢20张票,利用多线程实现. public class Web123506 implements Runnable{ private int ticteksNums=20;// ...
- Java多线程的同步机制(synchronized)
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在 java里边就是拿到某个同步对象的锁(一个对象只有一把锁): 如果这个时候同步对象的锁被其他线程拿走了,他(这个 ...
- java多线程之线程的同步与锁定(转)
一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. publicc ...
- Java多线程超详细总结
目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么 ...
最新文章
- 程序员面试题100题第29题——调整数组顺序使奇数位于偶数前面
- SWIFT入门 Dictionary
- springboot2.3.4集成EhCache缓存框架完整代码
- MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
- 解决NF4网卡网刻速度问题
- corefx 源码学习:SqlClient 是如何同步建立 Socket 连接的
- 2017西安交大ACM小学期 刁钻的顾客[3进制+折半枚举]
- Android 创世纪 第二天
- python 写csv scrapy_Python神技能 | 使用爬虫获取汽车之家全车型数据
- mysql5.6.22编译安装教程_Linux CentOS6.0下编译安装MySQL 5.6.22
- 助力小程序生态发展 “小程序生态孵化社区”成立
- java kettle 日志 log_kettle使用log4j管理输出日志
- android 高音质 播放器,安卓音质最强音乐播放器—Rockbox
- 文本聚类分析算法_常用的聚类分析算法
- 为Ubuntu安装中文语言包
- python如何打开文件选择框_python文件选择对话框的操作方法
- java毕业设计产品销售管理系统Mybatis+系统+数据库+调试部署
- echarts饼状图
- #pragma comment
- Android模拟器网络连接问题解决,解决小蚁安卓模拟器网络异常无法连接的方法...