代码如下:
/**
*
* @author pc
*2019年5月28日
*打印a-z 字符,其中一个线程打印元音字符,一个线程打印辅音字符
*/
public class PrintChar {
ReentrantLock lock=new ReentrantLock();
private Condition conditionA = lock.newCondition();
private Condition conditionB = lock.newCondition();
private static char c='a';
private static List list;
static {
list=Arrays.asList('a','e','i','o','u');
}
public static void main(String[] args) {
PrintChar printChar = new PrintChar();
new Thread(printChar.new MyThreadA()).start();
new Thread(printChar.new MyThreadB()).start();
}
class MyThreadA implements Runnable{//打印辅音
@Override
public void run() {
while (c<='z') {
lock.lock();
try {
while (list.contains(c)) {//当前是元音字母
try {
conditionA.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+":"+c++);
conditionB.signal();
} finally {
lock.unlock();
}
}
}
}
class MyThreadB implements Runnable{//打印元音
@Override
public void run() {
while (c<='z') {
lock.lock();
try {
while (!list.contains(c)) {//当前是辅音字母
try {
conditionB.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+":"+c++);
conditionA.signal();
} finally {
lock.unlock();
}
}
}
}
}
打印结果:
Thread-1:a
Thread-0:b
Thread-0:c
Thread-0:d
Thread-1:e
Thread-0:f
Thread-0:g
Thread-0:h
Thread-1:i
Thread-0:j
Thread-0:k
Thread-0:l
Thread-0:m
Thread-0:n
Thread-1:o
Thread-0:p
Thread-0:q
Thread-0:r
Thread-0:s
Thread-0:t
Thread-1:u
Thread-0:v
Thread-0:w
Thread-0:x
Thread-0:y
Thread-0:z