Single Threaded Execution Pattern【独木桥模式】

一:single threaded execution pattern的参与者
--->SharedResource(共享资源)

二:single threaded execution pattern模式什么时候使用
--->多线程程序设计时
--->数据可被多个线程访问的时候
--->共享资源状态可能变化的时候
--->需要确保数据安全性的时候

三:single threaded execution pattern思考
--->synchronized一见到它,势必保护着什么公共资源的数据。保证数据安全,就得所有该保护的地方都得保护。
--->保护公共资源的数据的范围叫临界区,临界区尽可能的小。提高性能。
--->程序设计的时候,一定要防止死锁的发生。主要是同步方法的外部调用顺序,防止交叉调用,多线程时,会发生死锁。

案例:三个人来回通过一扇门,通过时记录该人的姓名和地址。

门类(公共资源)

 /**
*
*/
package com.benxq.thread2; /**
* 门类:代表需要访问的公共资源
* Created by qucf on 2015年10月22日.
*/
public class Gate {
//计数器
private int count=0; //通过这扇们的名字
private String name; //正在通过这扇们的人的地址
private String address; //通过这扇门的动作,存在多线程同事访问该资源,(临界区需要做同步)
public synchronized void passGate(String name,String address){
count++;
this.name=name;
this.address=address;
check();
}
//检查数据完整性,如果数据不完整说明程序的安全性已经挂掉,打印报警信息
private void check(){
if(name.charAt(0)!=address.charAt(0)){
System.out.println("========错误========"+count+"人 name="+name+"通过时发生数据不完整");
}
}
}

人类(线程类)

 /**
*
*/
package com.benxq.thread2; /**
* Created by qucf on 2015年10月22日.
*/
public class UserThread implements Runnable{ //门
private Gate gate; //当前人的名称
private String name; //地址
private String address; public UserThread(Gate gate,String name,String address){
this.gate=gate;
this.name=name;
this.address=address;
} @Override
public void run() {
System.out.println("通过人:"+name);
while(true){
gate.passGate(name, address);
}
} }

测试类(主线程)

 /**
*
*/
package com.benxq.thread2; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; /**
* 测试类
* Created by qucf on 2015年10月22日.
*/
public class Test { public static void main(String[] args) {
//创建一个门
Gate gate=new Gate(); //创建一个线程池
ExecutorService es=Executors.newFixedThreadPool(10);
for (int i = 0; i < 10; i++) {
es.submit(new UserThread(gate, "Zhansan"+i, "Z地址"+i));
} }
}

多线程学习之一独木桥模式Single Threaded Execution Pattern的更多相关文章

  1. 多线程程序设计学习(2)之single threaded execution pattern

    Single Threaded Execution Pattern[独木桥模式] 一:single threaded execution pattern的参与者--->SharedResourc ...

  2. JAVA并发设计模式学习笔记(二)—— Single Threaded Execution Pattern

    注:本文的主要参考资料为结城浩所著<JAVA多线程设计模式>. 单线程执行模式(Single Threaded Execution Pattern)是最简单的多线程设计模式,几乎所有其他的 ...

  3. 多线程设计模式(一) Single Threaded Execution

    这里有一座独木桥.因为桥身非常的细,一次只能允许一个人通过.当这个人没有下桥,另一个人就不能过桥.如果桥上同时又两个人,桥就会因为无法承重而破碎而掉落河里. 这就是Single Threaded Ex ...

  4. 多线程系列之二:Single Thread Execution 模式

    一,什么是SingleThreadExecution模式?同一时间内只能让一个线程执行处理 二,例子 1.不安全的情况 用程序模拟 三个人频繁地通过一个只允许一个人经过的门.当人通过时,统计人数便会增 ...

  5. 多线程学习之五超时模式Timer

    timed[超时模式]案例:一个线程提供下载数据,另一个线程执行下载,如果有5秒钟以上,提供下载的线程没有提供数据,下载线程因超时异常,停止下载线程运行. 超时异常类 /** * */ package ...

  6. 设计模式学习——抽象工厂模式(Abstract Factory Pattern)

    现有一批装备(产品),分为不同的部位(上装.下装)与不同的等级(lv1.lv2).又有不同lv的工厂,只生产对应lv的全套装备. 代码实现上...本次写得比较偷懒,函数实现都写在头文件了.... 有些 ...

  7. JAVA多线程学习笔记(1)

    JAVA多线程学习笔记(1) 由于笔者使用markdown格式书写,后续copy到blog可能存在格式不美观的问题,本文的.mk文件已经上传到个人的github,会进行同步更新.github传送门 一 ...

  8. 多线程学习之二坚不可摧模式Immutable pattern

    Immutable pattern[坚不可摧模式] 一:immutable pattern的参与者--->immutable(不变的)参与者        1.1:immutable参与者是一个 ...

  9. 多线程设计模式——Read-Write Lock模式和Future模式分析

    目录 多线程程序评价标准 任何模式都有一个相同的"中心思想" Read-Write Lock 模式 RW-Lock模式特点 冲突总结 手搓RW Lock模式代码 类图 Data类 ...

随机推荐

  1. 谈话节目APE系列:如何成为技术达人

    作为一个程序猿,总有消退的前辈.或更年轻的同行.牛逼的人总是羡慕. 让我们搞自己痛苦的日子 BUG .头发很快结束了抓,人们扫两.修改一行代码.问题得以克服:例如,他们自己开发的十年,少付 10K , ...

  2. H.265/HEVC Codec 编解码 (MP4 和 TS)

    1. H.265/HEVC 播放器 1) VLC media player 2.1.3 (眼下不支持H.265 TS播放) 2)ffmpeg中的ffplay (如:ffplay  hevc.ts) 3 ...

  3. HDU 1026 Ignatius and the Princess I 迷宫范围内的搜索剪枝问题

    这个问题是一个典型的类型的问题迷宫广泛的搜索. 在网上看到了很多解决方案. 没什么解决问题的分析报告,不指出其中的关键点.代码更像是一大抄.一些分析师也有很大的文章分析.只是不要全部命中关键,什么是广 ...

  4. bonecp使用数据源

    bonecp.properties jdbc.driverClass=oracle.jdbc.driver.OracleDriver jdbc.jdbcUrl=jdbc:oracle:thin:@19 ...

  5. hadoop编程小技巧(7)---自己定义输出文件格式以及输出到不同文件夹

    代码測试环境:Hadoop2.4 应用场景:当须要定制输出数据格式时能够採用此技巧,包含定制输出数据的展现形式.输出路径.输出文件名称称等. Hadoop内置的输出文件格式有: 1)FileOutpu ...

  6. jQuery、Ajax分页

    1.效果预览 2.HTML代码 <div class="row"> <div class="col-lg-12 col-sm-12 col-xs-12 ...

  7. iOS_21团购_发送请求【点评】数据

    结果表明,一个简单的请求: 用到的点评封装的类: 使用tableView简单展示: // // DealListController.m // 帅哥_团购 // // Created by beyon ...

  8. MapReduce架构和算法(2)

    一个.combiner计划 每map它可能会产生大量的输出,combiner的作用是map输出端先做合并.reducer的数据量. combiner最基本是实现本地key的归并,combiner具有类 ...

  9. 创意HTML5文字特效 类似翻页的效果

    原文:创意HTML5文字特效 类似翻页的效果 之前在网上看到一款比较有新意的HTML5文字特效,文字效果是当鼠标滑过是出现翻开折叠的效果,类似书本翻页.于是我兴致勃勃的点开源码看了一下,发现其实实现也 ...

  10. 采用max_dump_file_size 参数限制trc文件大小

    max_dump_file_size 参数:这个参数可以限制相应的过程trc文件大小(进程是否是oracle后台和前台应用程序对应的server process) 使用案例: 若是一个trc文件已经4 ...