java 多线程 临界区_多线程编程的设计模式 临界区模式
临界区模式 Critical Section Pattern 是指在一个共享范围中只让一个线程执行的模式.
它是所有其它多线程设计模式的基础,所以我首先来介绍它.
把着眼点放在范围上,这个模式叫临界区模式,如果把作眼点放在执行的线程上,这个模式就叫
单线程执行模式.
首先我们来玩一个钻山洞的游戏,我 Axman,朋友 Sager,同事 Pentium4.三个人在八角游乐场
循环钻山洞(KAO,减肥训练啊),每个人手里有一个牌子,每钻一次洞口的老头会把当前的次序,
姓名,牌号显示出来,并检查名字与牌号是否一致.
OK,这个游戏的参与者有游乐场老头Geezer,Player,就是我们,还有山洞 corrie.
public class Geezer {
public static void main(String[] args){
System.out.println("预备,开始!");
Corrie c = new Corrie();//只有一个山洞,所以生存一个实例后传给多个Player.
new Player("Axman","001",c).start();
new Player("Sager","002",c).start();
new Player("Pentium4","003",c).start();
}
}
这个类暂时没有什么多说的,它是一个Main的角色.
public class Player extends Thread{
private final String name;
private final String number;
private final Corrie corrie;
public Player(String name,String number,Corrie corrie) {
this.name = name;
this.number = number;
this.corrie = corrie;
}
public void run(){
while(true){
this.corrie.into(this.name,this.number);
}
}
}
在这里,我们把成员字段都设成final的,为了说明一个Player一旦构造,他的名字和牌号就不能改
变,简单说在游戏中,我,Sager,Pentium4三个人不会自己偷偷把自己的牌号换了,也不会偷偷地去
钻别的山洞,如果这个游戏一旦发生错误,那么错误不在我们玩家.
import java.util.*;
public class Corrie {
private int count = 0;
private String name;
private String number;
private HashMap lib = new HashMap();//保存姓名与牌号的库
public Corrie(){
lib.put("Axman","001");
lib.put("Sager","002");
lib.put("Pentium4","003");
}
public void into(String name,String number){
this.count ++;
this.name = name;
this.number = number;
if(this.lib.get(name).equals(number))
test():
}
public String display(){
return this.count+": " + this.name + "(" + this.number + ")";
}
private void test(){
if(this.lib.get(name).equals(number))
;
//System.out.println("OK:" + display());
else
System.out.println("ERR:" + display());
}
}
java 多线程 临界区_多线程编程的设计模式 临界区模式相关推荐
- 第四章Java核心类库_多线程
第四章第五节Java核心类库_多线程 多线程 一.线程与进程 1.线程与进程 2.线程调度 二.同步与异步&并发与并行 1. 同步与异步 2. 并发与并行 三.继承Thread 1.代码块 2 ...
- Java多线程相关知识【17】--设计模式--上下文模式(Context)
文章目录 Java多线程相关知识[17]--设计模式--上下文模式(Context) 1. 问题的引入 2. 解决方法 1. 解决理论 2. 实操代码 上下文数据保存 上文 下文 调度者 测试上下文 ...
- java integer 不变模式_多线程编程的设计模式 不变模式(zt)
因为字符串类是不变模式最典型的代表,所以其它的知识将在下面继续介绍. 多线程编程的设计模式 不变模式(二) 不变模式(Immutable Pattern)顾名思义,它的状态在它的生命周期内是永恒的(晕 ...
- java多线程实例_多线程&高并发(全网最新:面试题+导图+笔记)面试手稳心不慌...
前言 当你开始开始去跳槽面试的时候,明明只是一份15K的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是凉凉:现如今市场,多线程.高并发编程.分布式.负载均衡.集群等可以说是现在 ...
- java web 线程_多线程在javaweb中的应用
1.web应用中,要对某一个任务用多线程实现,最简单的代码格式是不是必须把要执行的代码放在run方法中? WEB服务器会帮你把每个访问请求开辟一个线程,你只要按照你所开发的框架,比如tomcat会让你 ...
- java 求导函数_面向对象编程 —— java实现函数求导
文章目录 首先声明一点,本文主要介绍的是面向对象(OO)的思想,顺便谈下函数式编程,而不是教你如何准确地.科学地用java求出函数在一点的导数. ★引子 defd(f) :defcalc(x) : d ...
- java 线程 并发_多线程高并发编程总结
多线程 第一章 一.终止线程的三种方法: 1.使用退出标志,是县城正常退出,也就是当run方法完成后线程终止. 2.stop不推荐 3.使用interrupt(打了一个停止标记,并不是真的停止线程). ...
- 多线程 转账_多线程编程不可错过——彻底理解volatile
持续分享互联网一线研发技术,欢迎关注我. volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Ja ...
- java 线程开销_多线程的线程开销
多线程中两个必要的开销:线程的创建.上下文切换 创建线程: 创建线程使用是直接向系统申请资源的,对操作系统来说,创建一个线程的代价是十分昂贵的, 需要给它分配内存.列入调度,同时在线程切换的时候还要执 ...
最新文章
- Failure [INSTALL_FAILED_ALREADY_EXISTS
- python爬虫 - Urllib库及cookie的使用
- java线程和操作系统线程的区别,赶紧收藏备战金三银四!
- 【深度学习入门到精通系列】Recurrent和Residual解释
- Python [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 解决方法
- tomcat怎么平滑更新项目_tomcat_deploy 平滑启动脚本
- Vue的内容分发slot的使用
- [Robot Framework] SikuliLibrary的关键字执行依赖java进程,但是上次的java进程如果没有杀掉,robot framework控制台的日志出不来,怎么办?...
- Linux内存管理:ARM64体系结构与编程之cache(3):cache一致性协议(MESI、MOESI)、cache伪共享
- angular4动态添加html,angular4 动态创建组件
- 【数据结构的魅力】001.认识复杂度二分法异或运算
- 基于Altium Designer的4层PCB板的绘制
- HDU 4003 Find Metal Mineral
- API Monitor简介(API监控工具)
- DRL-FlappyBird
- 动态分区最佳适应算法c语言,使用最佳适应算法对内存实现模拟动态分区管理...
- 微服务架构 | 如何利用好日志链路追踪做性能分析?
- Windows 任意窗口置顶显示
- android 动态改变图标颜色
- webvnc novnc 方案
热门文章
- 嘘,这是手淘双11 GMV 暴涨的秘密
- Knative Service 是如何指定端口和协议的
- 开发函数计算的正确姿势 —— 安装第三方依赖
- 如何从零开始用Keras开发一个机器翻译系统
- 阿里云MaxCompute印度开服,加速大数据产业升级
- 亚信安全发布2021年挖矿病毒专题报告,聚焦挖矿病毒进化与治理
- DeVOpS 实战:Kubernetes 微服务监控体系
- 企业微信H5_网页jssdk调用 config和agentconfig的区别
- ln: failed to create symbolic link ‘/usr/bin/mysql’: File exists
- PL/SQL Developer 13.0设置中文