使用ReentrantLock实现两个线程交替打印
package com.bonc;
import com.alibaba.druid.sql.visitor.functions.Char;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ThreadTest {
private static Lock lock = new ReentrantLock();
private static Condition c1 = lock.newCondition();
private static Condition c2 = lock.newCondition();
private static CountDownLatch count = new CountDownLatch(1);
public static void main(String[] args) {
String c = "ABCDEFGHI";
char[] ca = c.toCharArray();
String n = "123456789";
char[] na = n.toCharArray();
Thread t1 = new Thread(()->{
try {
lock.lock();
count.countDown();
for (char c3 : ca) {
c1.signal();
System.out.print(c3);
c2.await();
}
c1.signal();
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
});
Thread t2 = new Thread(()->{
try {
lock.lock();
count.countDown();
for (char c3 : na) {
c2.signal();
System.out.println(c3);
c1.await();
}
c2.signal();
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
});
t1.start();
t2.start();
}
}

相关文章: