Java_多线程实现有序输出ABC

多线程实现有序输出10次ABC

Lock 和 Condition 同步机制实现

public class Demo1 {

     public static void main(String[] args) {
    	ABC abc=new ABC();
    	Thread aa=new Thread(new Runnable() {
    			@Override
    			public void run() {
    				// TODO Auto-generated method stub
    				for(int i=0;i<10;i++)
    				abc.prinA();
    			}
		});
      	Thread bb=new Thread(new Runnable() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				for(int i=0;i<10;i++)
				abc.prinB();
			}
      	});
      	Thread cc=new Thread(new Runnable() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				for(int i=0;i<10;i++)
				abc.prinC();
			}

      	});
    	aa.start();
    	bb.start();
    	cc.start();
     }
}
class ABC {
	String s="C";//标记,await条件
	private static final Lock lock=new ReentrantLock();
	private Condition Acon=lock.newCondition();
	private Condition Bcon=lock.newCondition();
	private Condition Ccon=lock.newCondition();
	
	public void prinA() {
		lock.lock();
		try {
			while(s!="C") {
				Acon.await();
			}
			System.out.print("A");
			s="A";
			Bcon.signal();
		}catch(Exception e){
			e.printStackTrace();
		}finally {
			lock.unlock();
		}
	}
	public void prinB() {
		lock.lock();
		try {
			while(s!="A") {
				Bcon.await();
			}
			System.out.print("B");
			s="B";
			Ccon.signal();
		}catch(Exception e){
			e.printStackTrace();
		}finally {
			lock.unlock();
		}
	}
	public void prinC() {
		lock.lock();
		try {
			while(s!="B") {
				Ccon.await();
			}
			System.out.println("C");
			s="C";
			Acon.signal();
		}catch(Exception e){
			e.printStackTrace();
		}finally {
			lock.unlock();
		}
	}
	
}

 

你可能感兴趣的:(Java_多线程实现有序输出ABC)