多线程程序设计学习(2)之single threaded execution pattern
Single Threaded Execution Pattern【独木桥模式】
一:single threaded execution pattern的参与者
--->SharedResource(共享资源)
二:single threaded execution pattern模式什么时候使用
--->多线程程序设计时
--->数据可被多个线程访问的时候
--->共享资源状态可能变化的时候
--->需要确保数据安全性的时候
三:single threaded execution pattern思考
--->synchronized一见到它,势必保护着什么公共资源的数据。保证数据安全,就得所有该保护的地方都得保护。
--->保护公共资源的数据的范围叫临界区,临界区尽可能的小。提高性能。
--->程序设计的时候,一定要防止死锁的发生。主要是同步方法的外部调用顺序,防止交叉调用,多线程时,会发生死锁。
案例:三个人来回通过一扇门,通过时记录该人的姓名和地址。
门类(公共资源)
package com.yeepay.sxf.thread1;
/**
* 门类(代表着多线程程序访问的公共资源)
* @author sxf
*
*/
public class Gate {
//计数器
private int counter=0;
//通过这扇门的人的名字
private String name;
//正在通过这扇门的人的地址
private String address;
//通过这扇门的动作
//存在多线程同时访问该资源。(临界区需要做同步)
public synchronized void passGate(String name,String address){
counter+=1;
this.name=name;
this.address=address;
check();
}
//记录通过这扇门的人的信息
@Override
public String toString() { return "NO:"+counter+"人 name="+name+" address="+address;
} //检查,如果数据不完整,说明多线程程序的安全性挂掉。打印报警信息
private void check(){
if(name.charAt(0)!=address.charAt(0)){
System.out.println("**********breaken*******"+toString());
}
}
}
人类(线程类)
package com.yeepay.sxf.thread1;
/**
* 人类(不同的人代表不同的线程,访问公共资源门)
* @author sxf
*
*/
public class UserThread implements Runnable {
//门
private final Gate gate;
//当前的人名
private final String myName;
//当前的人的地址
private final String myAddress;
//线程的构造器
public UserThread(Gate gate,String myName,String myAddress) {
this.gate=gate;
this.myName=myName;
this.myAddress=myAddress;
} //线程体
@Override
public void run() {
System.out.println("UserThread.run() begin:"+myName);
while (true) {
gate.passGate(myName, myAddress);
} } }
测试类(主线程)
package com.yeepay.sxf.thread1;
/**
* 测试类
* @author sxf
*
*/
public class Test {
public static void main(String[] args) {
//先声明一个门
Gate gate=new Gate(); //声明三个线程
Thread user1Thread=new Thread(new UserThread(gate, "Asxf", "Ahenan"));
Thread user2Thread=new Thread(new UserThread(gate,"Bsxs","Bhenan"));
Thread user3Thread=new Thread(new UserThread(gate,"Csxy","Chenan")); //启动三个线程
user1Thread.start();
user2Thread.start();
user3Thread.start();
}
}
多线程程序设计学习(2)之single threaded execution pattern的更多相关文章
- 多线程学习之一独木桥模式Single Threaded Execution Pattern
Single Threaded Execution Pattern[独木桥模式] 一:single threaded execution pattern的参与者--->SharedResourc ...
- JAVA并发设计模式学习笔记(二)—— Single Threaded Execution Pattern
注:本文的主要参考资料为结城浩所著<JAVA多线程设计模式>. 单线程执行模式(Single Threaded Execution Pattern)是最简单的多线程设计模式,几乎所有其他的 ...
- 多线程设计模式(一) Single Threaded Execution
这里有一座独木桥.因为桥身非常的细,一次只能允许一个人通过.当这个人没有下桥,另一个人就不能过桥.如果桥上同时又两个人,桥就会因为无法承重而破碎而掉落河里. 这就是Single Threaded Ex ...
- 多线程程序设计学习(13)Active Object pattern
Active Object[接收异步消息的对象] 一:Active Object的参与者--->客户端线程(发起某种操作请求处理)--->代理角色(工头)--->实际执行者(工人)- ...
- 多线程程序设计学习(12)Thread-soecific storage pattern
Thread-Specific-Storage[线程保管箱] 一:Thread-Specific Storage的参与者--->记录日志的线程(ClientThread)--->负责获取不 ...
- 多线程程序设计学习(7)read-write lock pattern
Read-Write Lock Pattern[读写]一:Read-Write Lock Pattern的参与者--->读写锁--->数据(共享资源)--->读线程--->写线 ...
- 多线程系列之二:Single Thread Execution 模式
一,什么是SingleThreadExecution模式?同一时间内只能让一个线程执行处理 二,例子 1.不安全的情况 用程序模拟 三个人频繁地通过一个只允许一个人经过的门.当人通过时,统计人数便会增 ...
- 多线程程序设计学习(3)immutable pattern模式
Immutable pattern[坚不可摧模式] 一:immutable pattern的参与者--->immutable(不变的)参与者 1.1:immutable参与者是一个 ...
- 多线程程序设计学习(6)Producer-Consumer模式
Producer-Consumer[生产消费者模式]一:Producer-Consumer pattern的参与者--->产品(蛋糕)--->通道(传递蛋糕的桌子)--->生产者线程 ...
随机推荐
- C#文件对话框,一次多选文件设置
OpenFileDialog ofd = new OpenFileDialog();ofd.Multiselect = true;if (ofd.ShowDialog() == DialogResul ...
- [设计模式] 8 组合模式 Composite
DP书上给出的定义:将对象组合成树形结构以表示“部分-整体”的层次结构.组合使得用户对单个对象和组合对象的使用具有一致性.注意两个字“树形”.这种树形结构在现实生活中随处可见,比如一个集团公司,它有一 ...
- [设计模式] 3 创建者模式 builder
转载http://blog.csdn.net/wuzhekai1985/article/details/6667467 建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不 ...
- maven_Error building POM (may not be this project's POM)错误
如果maven项目在执行编译等操作时报如题错误的话,请仔细检查pom.xml,一般是由pom的语法错误导致的,例如我的项目是因为: dependencies 元素下不应该有properties元素导致 ...
- 【转载】SSH整合使用步骤
SSH整合使用步骤 由于刚开始学习SSH,其中的配置比较多,为了下次能够快速的进行配置,将SSH整合的过程记录下来,以便下次查阅. 软件环境:MyEclipse 9.0.Struts2.2.Sprin ...
- Bessie的体重问题
P1028 Bessie的体重问题 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 USACO OCT09 8TH 描述 Bessie像她的诸多姊妹一样,因 ...
- 不要将缓存服务器与Tomcat放在单台机器上,否则出现竞争内存问题
缓存分为本地缓存和远程分布式缓存,本地缓存访问速度更快但缓存数据量有限,同时存在与应用程序争用内存的情况. 1.不要将缓存服务器与Tomcat放在单台机器上,否则出现竞争内存问题 2.不要将缓存服务器 ...
- Sina App Engine(SAE)入门教程(3)-KVDB使用
简介 因为传统关系型数据库在分布式环境下表现的扩展性不足等缺点,近年来NoSQL的概念渐渐成为业界关注的焦点,越来越多的技术人员也习惯于使用NoSQL数据库进行日常开发,SAE为了应对这种新需求,也进 ...
- 龙芯将两款 CPU 核开源,这意味着什么?
10月21日,教育部计算机类教学指导委员会.中国计算机学会教育专委会将2016 CNCC期间在山西太原举办“面向计算机系统能力培养的龙芯CPU高校开源计划”活动,在活动中,龙芯中科宣布将GS132和G ...
- Pascal编译器大全(非常难得)
http://www.pascaland.org/pascall.htm Some titles (french) : Compilateurs Pascal avec sources = compi ...