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. StackExchange.Redis 使用-同步 异步 即发即弃 (三)

    访问单个服务器 有时候需要为单个服务器指定特定的命令 . IServer server = redis.GetServer("localhost", 6379); GetServe ...

  2. 更改Calendar背景图(使用系统映像选择器)

    最近提出的申请,主接口是一个历,网上有很多第三方的日历控件,有使用ImageView实现,有使用GridView实现,它的优点是控制的灵活性. 而我选择使用本机CalendarView,关于这个控件, ...

  3. 搞个这样的APP要多久? (转)

    这是一个“如有雷同,纯属巧合”的故事,外加一些废话,大家请勿对号入座.开始了…… 我有些尴尬地拿着水杯,正对面坐着来访的王总,他是在别处打拼的人,这几年据说收获颇丰,见移动互联网如火如荼,自然也想着要 ...

  4. IOS-Plist文件存储(1)

    1.什么是一个文件系统? IOS每个应用程序都有自己的文件系统.并且有一个相应的接入,一般分 ~/Documents/ ~/tmp/ ~/Library/Caches/ ~/Library/Prefe ...

  5. ADT后windows菜单未找到Android SDK Manager和Android Virtual Device Manager该解决方案的选择

    打开今天凌晨ADT准备编译androidproject的时候,突然发现windows菜单下的Android SDK Manager和Android Virtual Device Manager选项不见 ...

  6. 开源GUI-Microwindows之程序入口分析

    **************************************************************************************************** ...

  7. 推荐几个我一直在使用chrome小工具(上)

    我用的chrome插件挺多的,所谓工欲善其事必先利其器,我热衷于搜寻好用的工具来让我平时的工作事半功倍. 以下介绍几款我正在用的感觉还不错的插件,假设大家还有其他好用的(肯定有,chrome插件库太庞 ...

  8. CORS

    CORS(跨域资源共享) 前言:上一篇文章提到使用JSONP实现跨域请求的时候,偶然间提到CORS,即Cross-Origin Resource Sharing(跨域资源共享).虽然前些天也看了一下, ...

  9. nodejs使用connect-mongodb报错(Please ensure that you set the default write concern)

    原本是使用connect-mongo的,可能是express版本号的升级报错了.改用connect-mongodb.可是使用后出现了例如以下的警告: G:\nodejs\moviesite>gr ...

  10. 使用newLISP由SMTPserver发送电子邮件

    直接使用的标准模块smtpx.lsp, smtp.lsp你可以不设置port,庭审后,没用. 以下是一个示例代码: #!/usr/bin/newlisp (set 'debug-flag true) ...