临界区模式 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 多线程 临界区_多线程编程的设计模式 临界区模式相关推荐

  1. 第四章Java核心类库_多线程

    第四章第五节Java核心类库_多线程 多线程 一.线程与进程 1.线程与进程 2.线程调度 二.同步与异步&并发与并行 1. 同步与异步 2. 并发与并行 三.继承Thread 1.代码块 2 ...

  2. Java多线程相关知识【17】--设计模式--上下文模式(Context)

    文章目录 Java多线程相关知识[17]--设计模式--上下文模式(Context) 1. 问题的引入 2. 解决方法 1. 解决理论 2. 实操代码 上下文数据保存 上文 下文 调度者 测试上下文 ...

  3. java integer 不变模式_多线程编程的设计模式 不变模式(zt)

    因为字符串类是不变模式最典型的代表,所以其它的知识将在下面继续介绍. 多线程编程的设计模式 不变模式(二) 不变模式(Immutable Pattern)顾名思义,它的状态在它的生命周期内是永恒的(晕 ...

  4. java多线程实例_多线程&高并发(全网最新:面试题+导图+笔记)面试手稳心不慌...

    前言 当你开始开始去跳槽面试的时候,明明只是一份15K的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是凉凉:现如今市场,多线程.高并发编程.分布式.负载均衡.集群等可以说是现在 ...

  5. java web 线程_多线程在javaweb中的应用

    1.web应用中,要对某一个任务用多线程实现,最简单的代码格式是不是必须把要执行的代码放在run方法中? WEB服务器会帮你把每个访问请求开辟一个线程,你只要按照你所开发的框架,比如tomcat会让你 ...

  6. java 求导函数_面向对象编程 —— java实现函数求导

    文章目录 首先声明一点,本文主要介绍的是面向对象(OO)的思想,顺便谈下函数式编程,而不是教你如何准确地.科学地用java求出函数在一点的导数. ★引子 defd(f) :defcalc(x) : d ...

  7. java 线程 并发_多线程高并发编程总结

    多线程 第一章 一.终止线程的三种方法: 1.使用退出标志,是县城正常退出,也就是当run方法完成后线程终止. 2.stop不推荐 3.使用interrupt(打了一个停止标记,并不是真的停止线程). ...

  8. 多线程 转账_多线程编程不可错过——彻底理解volatile

    持续分享互联网一线研发技术,欢迎关注我. volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Ja ...

  9. java 线程开销_多线程的线程开销

    多线程中两个必要的开销:线程的创建.上下文切换 创建线程: 创建线程使用是直接向系统申请资源的,对操作系统来说,创建一个线程的代价是十分昂贵的, 需要给它分配内存.列入调度,同时在线程切换的时候还要执 ...

最新文章

  1. Failure [INSTALL_FAILED_ALREADY_EXISTS
  2. python爬虫 - Urllib库及cookie的使用
  3. java线程和操作系统线程的区别,赶紧收藏备战金三银四!
  4. 【深度学习入门到精通系列】Recurrent和Residual解释
  5. Python [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 解决方法
  6. tomcat怎么平滑更新项目_tomcat_deploy 平滑启动脚本
  7. Vue的内容分发slot的使用
  8. [Robot Framework] SikuliLibrary的关键字执行依赖java进程,但是上次的java进程如果没有杀掉,robot framework控制台的日志出不来,怎么办?...
  9. Linux内存管理:ARM64体系结构与编程之cache(3):cache一致性协议(MESI、MOESI)、cache伪共享
  10. angular4动态添加html,angular4 动态创建组件
  11. 【数据结构的魅力】001.认识复杂度二分法异或运算
  12. 基于Altium Designer的4层PCB板的绘制
  13. HDU 4003 Find Metal Mineral
  14. API Monitor简介(API监控工具)
  15. DRL-FlappyBird
  16. 动态分区最佳适应算法c语言,使用最佳适应算法对内存实现模拟动态分区管理...
  17. 微服务架构 | 如何利用好日志链路追踪做性能分析?
  18. Windows 任意窗口置顶显示
  19. android 动态改变图标颜色
  20. webvnc novnc 方案

热门文章

  1. 嘘,这是手淘双11 GMV 暴涨的秘密
  2. Knative Service 是如何指定端口和协议的
  3. 开发函数计算的正确姿势 —— 安装第三方依赖
  4. 如何从零开始用Keras开发一个机器翻译系统
  5. 阿里云MaxCompute印度开服,加速大数据产业升级
  6. 亚信安全发布2021年挖矿病毒专题报告,聚焦挖矿病毒进化与治理
  7. DeVOpS 实战:Kubernetes 微服务监控体系
  8. 企业微信H5_网页jssdk调用 config和agentconfig的区别
  9. ln: failed to create symbolic link ‘/usr/bin/mysql’: File exists
  10. PL/SQL Developer 13.0设置中文