Java_多线程实现有序输出ABC

本文介绍了一种使用Java的Lock和Condition同步机制实现多线程环境下有序输出ABC的方法。通过三个线程分别输出A、B、C字符,利用信号量和等待条件确保输出顺序正确,实现了10次循环的有序输出。

多线程实现有序输出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();
		}
	}
	
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值