package org.my;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
class ShareSource{
private int flag=1;
private Lock lock=new ReentrantLock();
private Condition c1= lock.newCondition();
private Condition c2= lock.newCondition();
private Condition c3= lock.newCondition();
public void print2() throws InterruptedException {
lock.lock();
try{
while (flag!=1){
c1.await();
}
System.out.print(Thread.currentThread().getName());
flag=2;
c2.signal();
} finally {
lock.unlock();
}
}
public void print4() throws InterruptedException {
lock.lock();
try{
while (flag!=2){
c2.await();
}
System.out.print(Thread.currentThread().getName());
flag=3;
c3.signal();
} finally {
lock.unlock();
}
}
public void print5() throws InterruptedException {
lock.lock();
try{
while (flag!=3){
c3.await();
}
System.out.print(Thread.currentThread().getName());
flag=1;
c1.signal();
} finally {
lock.unlock();
}
}
}
public class Threadlearn35 {
public static void main(String[] args) {
final ShareSource shareSource = new ShareSource();
new Thread(()->{
for (int i = 1; i <= 10; i++) {
try {
shareSource.print2();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"AA").start();
new Thread(()->{
for (int i = 1; i <= 10; i++) {
try {
shareSource.print4();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"BB").start();
new Thread(()->{
for (int i = 1; i <= 10; i++) {
try {
shareSource.print5();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"CC").start();
}
}
写三个线程t1、t2、t3,t1线程只输出A,t2线程只输出B,t3线程只输出C,总体输出顺序控制在ABABCABABCABABCABABCABABCABABCABAC....循环模块“ABABC”
最新推荐文章于 2024-05-18 16:18:30 发布