import java.util.concurrent.CountDownLatch;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class ReentrantLockTest {
static ReentrantLock lock = new ReentrantLock();
static Condition cond1 = lock.newCondition();
static Condition cond2 = lock.newCondition();
public static void main(String[] args) {
final char[] str1 = "1234567".toCharArray();
final char[] str2 = "ABCDEFG".toCharArray();
final CountDownLatch countdown = new CountDownLatch(1);
new Thread(new Runnable() {
@Override
public void run() {
try {
countdown.await();//放在获得锁前面,否则会死锁
} catch (InterruptedException e1) {
e1.printStackTrace();
}
lock.lock();
try {
for (char c : str1) {
System.out.print(c);
cond2.signal();
cond1.await();
}
cond2.signal();
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();//记得释放锁,否则会死锁
}
}
}, "t1").start();
new Thread(new Runnable() {
@Override
public void run() {
lock.lock();
try {
for (char c : str2) {
System.out.print(c);
cond1.signal();
countdown.countDown();
cond2.await();
}
cond1.signal();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
lock.unlock();//记得释放锁,否则会死锁
}
}
}, "t2").start();
}
}
字母和数字交替输出,并保证字母永远排在前面
最新推荐文章于 2023-09-30 13:27:38 发布