a,b,c三个线程同时启动,a线程打印a,b线程打印b,c线程打印c,如何用Java代码实现按顺序打印abc,循环十次。

利用 Locksupport的两个方法:
    park(): 阻塞当前线程
    unpark(thread): 唤醒指定线程

public static void main(String[] args) {
		Thread a,b,c;
		a = new Thread(() -> {
			LockSupport.park();
			for(int i=0;i<10;i++){
				System.out.print(Thread.currentThread().getName());
				LockSupport.park();
			}
		},"a");
		b = new Thread(() -> {
			LockSupport.park();
			for(int i=0;i<10;i++){
				System.out.print(Thread.currentThread().getName());
				LockSupport.park();
			}
		},"b");
		c = new Thread(() -> {
			LockSupport.park();
			for(int i=0;i<10;i++){
				System.out.print(Thread.currentThread().getName());
				LockSupport.park();
			}
		},"c");
		a.start();
		b.start();
		c.start();
		int count = 1;
		for(;;){
			if(!a.isAlive() && !b.isAlive() && !c.isAlive()){
				break;
			}
			if(count%3 == 1){
				LockSupport.unpark(a);
			}
			if(count%3 == 2){
				LockSupport.unpark(b);
			}
			if(count%3 == 0){
				LockSupport.unpark(c);
			}
			try {
                // 主线程休眠10毫秒是为了把cpu的使用权让给 a/b/c 线程
				Thread.sleep(10);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			count++;
		}
	}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值