您的位置:首页 > 编程语言 > Java开发

多线程模式之-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);
        }

    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息