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 多线程 临界区_多线程编程的设计模式 临界区模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux如何运行verilog,lin
- 下一篇: 计算机专业英语第07章,计算机专业英语