java交替输出数字_java数字和字母两个线程交替打印

写两个线程,交替打印数字和字母。

package com.commontest.thread;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.atomic.AtomicBoolean;

import java.util.concurrent.locks.Condition;

import java.util.concurrent.locks.ReentrantLock;

/**

* Created by jiangfuqiang on 2016/5/13.

*/

public class ThreadPoolTest {

public static void main(String[] args) {

ReentrantLock lock = new ReentrantLock();

Condition digitLock = lock.newCondition();

Condition charLock = lock.newCondition();

AtomicBoolean flag = new AtomicBoolean(false);

new Thread(new Thread1(digitLock,charLock,flag,lock)).start();

new Thread(new Thread2(digitLock,charLock,flag,lock)).start();

}

}

class Thread1 implements Runnable {

private Condition digitLock;

private AtomicBoolean flag;

private Condition charLock;

private ReentrantLock lock;

public Thread1(Condition digitLock, Condition charLock, AtomicBoolean flag, ReentrantLock lock) {

this.digitLock = digitLock;

this.flag = flag;

this.charLock = charLock;

this.lock = lock;

}

public void run() {

for (int i = 0; i < 10; i++) {

System.out.print((i+1));

lock.lock();

if (i >= 9) {

flag.set(true);

charLock.signal();

lock.unlock();

break;

}

try {

charLock.signal();

digitLock.await();

lock.unlock();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

class Thread2 implements Runnable {

private Condition digitLock;

private AtomicBoolean flag;

private Condition charLock;

private ReentrantLock lock;

public Thread2(Condition digitLock, Condition charLock,AtomicBoolean flag, ReentrantLock lock) {

this.digitLock = digitLock;

this.flag = flag;

this.charLock = charLock;

this.lock = lock;

}

public void run() {

for (int i = 0; i < 26; i++) {

if (i != 0 && i%2 == 0 && !flag.get()) {

try {

lock.lock();

digitLock.signal();

charLock.await();

lock.unlock();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

System.out.print((char)(97+i));

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值