Single Thread Execution设计模式
2024-08-24 23:30:38
public class Test { public static void main(String[] args){ // FlightSercurityTest.test(); // EatNoodleThread.test(); EatNoodleThread1.test(); } } /* 16.1.1 非线程安全 */ class FlightSecurity{ private int count = 0; private String boardingPass = "null"; private String idCard = "null"; public synchronized void pass(String boardingPass, String idCard) { this.boardingPass = boardingPass; this.idCard = idCard; this.count++; check(); } private void check(){ if (boardingPass.charAt(0) != idCard.charAt(0)) { throw new RuntimeException("---Exception---"+toString()); } } @Override public String toString() { return "FlightSecurity{" + "count=" + count + ", boardingPass='" + boardingPass + '\'' + ", idCard='" + idCard + '\'' + '}'; } } class FlightSercurityTest{ static class Passenagers extends Thread{ private final FlightSecurity flightSecurity; private final String isCard; private final String boardingPass; public Passenagers(FlightSecurity flightSecurity, String isCard, String boardingPass) { this.flightSecurity = flightSecurity; this.isCard = isCard; this.boardingPass = boardingPass; } public void run(){ while (true){ flightSecurity.pass(boardingPass,isCard); } } } public static void test(){ final FlightSecurity f= new FlightSecurity(); new Passenagers(f,"A","A").start(); new Passenagers(f,"B","B").start(); new Passenagers(f,"C","C").start(); } } /* 16.3 吃面问题 */ class Tableware{ private final String toolName; public Tableware(String toolName) { this.toolName = toolName; } @Override public String toString() { return "Tableware: "+toolName; } } class TablewarePair{ private final Tableware left; private final Tableware right; public TablewarePair(Tableware left, Tableware right) { this.left = left; this.right = right; } public Tableware getLeft(){ return left; } public Tableware getRight(){ return right; } } class EatNoodleThread extends Thread{ private final String name; private final Tableware left; private final Tableware right; public EatNoodleThread(String name, Tableware left, Tableware right) { this.name = name; this.left = left; this.right = right; } public void run(){ while(true){ this.eat(); } } private void eat(){ synchronized (left){ synchronized (right){ System.out.println(name+" take up "+left+"(left)"); synchronized (right){ System.out.println(name+" take up "+right+"(right)"); System.out.println(name+" is eating now."); System.out.println(name+" put down "+right+"(right)"); } System.out.println(name+" put down "+left+"(left)"); } } } public static void test(){ Tableware fork = new Tableware("fork"); Tableware knife = new Tableware("knife"); new EatNoodleThread("Big",fork,knife).start(); new EatNoodleThread("Little",knife,fork).start(); } } class EatNoodleThread1 extends Thread{ private final String name; private final TablewarePair pair; public EatNoodleThread1(String name, TablewarePair pair) { this.name = name; this.pair = pair; } public void run() { while (true) { this.eat(); } } private void eat(){ synchronized (pair){ System.out.println(name+" take up "+pair.getLeft()+"(left)"); System.out.println(name+" put down "+pair.getRight()+"(right)"); System.out.println(name+" is eating now."); System.out.println(name+" take up "+pair.getLeft()+"(right)"); System.out.println(name+" put down "+pair.getLeft()+"(left)"); } } public static void test(){ Tableware fork = new Tableware("fork"); Tableware knife = new Tableware("knife"); TablewarePair pair = new TablewarePair(fork,knife); new EatNoodleThread1("A",pair).start(); new EatNoodleThread1("B",pair).start(); } }
最新文章
- 有关Javascript的length()函数
- PinPhoto On OS X
- jQuery--each遍历使用方法
- maven的一些常用配置
- Agile.Net 组件式开发平台 - 系统文档中心
- C#中的几个线程同步对象方法
- SIM卡读卡器的研究与设计
- 针对IE的CSS样式hack
- Unity3D ——强大的跨平台3D游戏开发工具(一)
- oracle10g 基于linux6安装问题收集
- 购物网站首页(学习ING)
- 【设计模式+原型理解】第一章:使用Javascript来巧妙实现经典的设计模式
- SDL 开发实战(五): SDL 纹理渲染
- go标准库的学习-strconv-字符串转换
- SpringBoot 整合携程Apollo配置管理中心
- active在iphone上不起作用
- vue2.* 事件 定义方法 执行方法 获取数据 改变数据 执行方法传值 以及事件对象 05
- HotSpot JVM 常用配置设置
- Spring事件监听Demo
- easyui 获取当前页签选中的名称