JAVA wait(), notify(),sleep使用

 需求:使用三线程同步模式,按顺序打印ABC ,循环10次,打印结果不混乱

public class Game implements Runnable {     
    
    private String name;     
    private Object prev;     
    private Object self;     
    
    private Game(String name, Object prev, Object self) {     
        this.name = name;     
        this.prev = prev;     
        this.self = self;     
    }     
    
    @Override    
    public void run() {     
        int count = 10;     
        while (count > 0) {     
            synchronized (prev) {    
                synchronized (self) {     
                    System.out.println(name);     
                    count--;  
                    try {
                    //必须加   不然有时顺序会乱
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}  
                  self.notify();     
                }     
                try {     
                    prev.wait();     
                } catch (InterruptedException e) {     
                    e.printStackTrace();     
                }     
            }     
    
        }     
    }     
    
    public static void main(String[] args) throws Exception {     
        Object a = new Object();     
        Object b = new Object();     
        Object c = new Object();   
        Game pa = new Game("A", b, a);   
        Game pb = new Game("B", c, b);   
        Game pc = new Game("C", a, c);  
    
        new Thread(pa).start(); 
        new Thread(pb).start();  
        new Thread(pc).start();  
        }     

  

猜你喜欢

转载自blog.csdn.net/weiqingsong150/article/details/46272771