java多线程下如何调用一个共同的内存单元(调用同一个对象)
时间:2022-05-05
本文章向大家介绍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方法的执行过程中可能随时被强制中断(特别是对于双核系统的计算机)
*/
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Docker Entry Script 详解
- 使用 docker-compose 替代 docker run
- 分享给您一个快速离职的 SHELL 脚本
- ASP.NET WebAPI 中的参数绑定
- Qt音视频开发7-ffmpeg音频播放
- 本地 Docker Registry 的安装与使用
- 安装 Docker 环境
- 为生产环境编译 Angular 2 应用
- 剑指offer 03:二维数组中的查找
- 《剑指offer》04:替换空格
- 《剑指offer》05: 从尾到头打印链表
- 《剑指offer》第六天:重建二叉树
- Android | 《看完不忘系列》之Glide
- Android | 资源冲突覆盖的一些思考
- 如何获取流式应用程序中checkpoint的最新offset