WEB开发网
开发学院软件开发Java 多线程设计模式--single threaded execution 阅读

多线程设计模式--single threaded execution

 2009-09-17 00:00:00 来源:WEB开发网   
核心提示:调用线程 Java代码publicclassUserThreadextendsThread{privatefinalGategate;privatefinalStringmyname;privatefinalStringmyaddress;publicUserThread(Gategate,Stringmyname,S

调用线程

Java代码  

public 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() { 
    System.out.println(myname + " BEGIN"); 
    while (true) { 
      gate.pass(myname, myaddress); 
    } 
  } 
}

同时只允许一个对象访问锁块.(类似于synchronized 标示的块)

这样做的主要原因是因为保护类变量不同时被多个线程修改

方法内部的变量不会在多线程同时修改.

任务

Java代码   

public class Gate { 
 private int counter = 0; 
 private String name = "Nobody"; 
 private String address = "Nowhere"; 
 //jdk1.5新特性 效率高于synchronized 
     private Lock passLock = new ReentrantLock(); 
 
 private Lock toStringLock = new ReentrantLock(); 
 
 public void pass(String name, String address) { 
 //使用锁机制 
         passLock.lock(); 
 try { 
  this.counter++; 
  this.name = name; 
  this.address = address; 
  check(); 
 } finally { 
   //解锁 
           passLock.unlock(); 
 } 
 } 
 
 public String toString() { 
 toStringLock.lock(); 
 try { 
  return "No." + counter + ": " + name + ", " + address; 
 } finally { 
  toStringLock.unlock(); 
 } 
 } 
 
 private void check() { 
 if (name.charAt(0) != address.charAt(0)) { 
  System.out.println("***** BROKEN ***** " + toString()); 
 } 
 } 
} 

主程序

Java代码

public class Main {  
  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();  
  } 
 

Tags:线程 设计模式 single

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接