代码:
package num;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class TreadPrint2 {
private final String[] ss= {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
private Lock lock = new ReentrantLock();
private Condition printSheng = lock.newCondition();
private Condition printYun = lock.newCondition();
int i=0;
//打印声母
class PrintSheng implements Runnable {
@Override
public void run() {
String t1Name=Thread.currentThread().getName();
while (i<26) {
lock.lock();
try {
if(!(ss[i].equals("a")||ss[i].equals("e")||ss[i].equals("i")||ss[i].equals("o")||ss[i].equals("u"))) {
printSheng.await();
}
printYun.signal();
//防止索引越界
if(i>=26) {
break;
}
System.out.println(t1Name+":"+ss[i]);
i++;
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
}
//打印韵母
class PrintYun implements Runnable {
@Override
public void run() {
String t2Name=Thread.currentThread().getName();
while (i<26) {
lock.lock();
try {
if((ss[i].equals("a")||ss[i].equals("e")||ss[i].equals("i")||ss[i].equals("o")||ss[i].equals("u"))) {
printYun.await();
}
printSheng.signal();
if(i>=26) {
break;
}
System.out.println(t2Name+":"+ss[i]);
i++;
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
}
}
测试:
public static void main(String[] args) {
twoTread();
}
public static void twoTread() {
TreadPrint2 test = new TreadPrint2();
Thread printNum = new Thread(test.new PrintSheng());
Thread printChar = new Thread(test.new PrintYun());
printChar.start();
printNum.start();
}
结果:
Thread-0:a
Thread-1:b
Thread-1:c
Thread-1:d
Thread-0:e
Thread-1:f
Thread-1:g
Thread-1:h
Thread-0:i
Thread-1:j
Thread-1:k
Thread-1:l
Thread-1:m
Thread-1:n
Thread-0:o
Thread-1:p
Thread-1:q
Thread-1:r
Thread-1:s
Thread-1:t
Thread-0:u
Thread-1:v
Thread-1:w
Thread-1:x
Thread-1:y
Thread-1:z