多线程模式之-single Threaded Execution Pattern
2009-01-04 19:00
465 查看
很简单的一个多线程模式之一,多个资源使用者使用资源时,资源类封装同步的方法,简单的加锁而于,属于一个使用者在使用其它使用者简单的等候,等候逻辑代码并不需要写,由Java虚拟机管理代码如下:
public class MainThread {
public static void main(String[] args) {
System.out.println("Testing Gate, hit CTRL + C to exit");
Gate gate = new Gate();
new UserThread(gate, "Alice", "Alaska").start();
new UserThread(gate, "Bobby", "Brazil").start();
new UserThread(gate, "Chris", "Canada").start();
}
}
/**
* ShareResource 共享资源参于者
* pass()方法与toString()方法的修饰符synchronized 确保资源的独享
*/
class Gate {
/** 保存的字段*/
private int counter = 0;
public String name ;
public String address;
/**
* 线程安全方法
* @param name String
* @param address String
*/
public synchronized void pass(String name, String address) {
//1 2 3 4 的操作组合为原子级别的操作
counter++; //1
this.name = name ; //2
this.address = address; //3
check(); //4
}
/**
* 线程安全方法
* @return String
*/
public synchronized String toString() {
return "No" + counter + ":" + name + "," + address;
}
public void check() {
if (name.charAt(0) != address.charAt(0)) {
System.out.println("*****Broken*****" + toString());
}
}
}
/**
* UseResource 资源使用者
*/
class UserThread extends Thread{
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;
}
public void run() {
while (true) {
System.out.println(myName + " passing");
gate.pass(myName, myAddress);
}
}
}
public class MainThread {
public static void main(String[] args) {
System.out.println("Testing Gate, hit CTRL + C to exit");
Gate gate = new Gate();
new UserThread(gate, "Alice", "Alaska").start();
new UserThread(gate, "Bobby", "Brazil").start();
new UserThread(gate, "Chris", "Canada").start();
}
}
/**
* ShareResource 共享资源参于者
* pass()方法与toString()方法的修饰符synchronized 确保资源的独享
*/
class Gate {
/** 保存的字段*/
private int counter = 0;
public String name ;
public String address;
/**
* 线程安全方法
* @param name String
* @param address String
*/
public synchronized void pass(String name, String address) {
//1 2 3 4 的操作组合为原子级别的操作
counter++; //1
this.name = name ; //2
this.address = address; //3
check(); //4
}
/**
* 线程安全方法
* @return String
*/
public synchronized String toString() {
return "No" + counter + ":" + name + "," + address;
}
public void check() {
if (name.charAt(0) != address.charAt(0)) {
System.out.println("*****Broken*****" + toString());
}
}
}
/**
* UseResource 资源使用者
*/
class UserThread extends Thread{
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;
}
public void run() {
while (true) {
System.out.println(myName + " passing");
gate.pass(myName, myAddress);
}
}
}
相关文章推荐
- 多线程学习之一独木桥模式Single Threaded Execution Pattern
- JAVA多线程(三)模式-Single Threaded Execution
- 多线程学习系列 - 1 - Single Threaded Execution Pattern
- JAVA并发设计模式学习笔记(二)—— Single Threaded Execution Pattern
- 多线程程序设计学习(2)之single threaded execution pattern
- java多线程之Single Threaded Execution模式
- Java中的线程(八)- Single Threaded Execution模式
- 线程之旅--Single Threaded Execution Pattern
- java多线程设计模式——学习笔记(2)Single Threaded Execution Pattern
- 单例模式(Singleten Pattern)
- 单例模式(SinglePattern)的应用
- 单例模式2(single pattern)
- Single Threaded Execution
- 【设计模式】创建型模式——单例模式(Single Pattern)
- 第一章 Single Threaded Execution
- 多线程程序设计学习(9)worker pattern模式
- 第1章 单例模式(Single Pattern)
- Single Threaded Execution----能通过这座桥的,只有一个人
- Thread-Per-message Pattern--JAVA多线程编程模式(7)
- 模式1--SingleThreadExecution