多线程轮流打印a,b,c
2024-01-07 21:39:29
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class PrintABC {
private static Lock lock = new ReentrantLock();
private static Condition conditionA = lock.newCondition();
private static Condition conditionB = lock.newCondition();
private static Condition conditionC = lock.newCondition();
private static int count = 0;
public static void main(String[] args) {
Thread threadA = new Thread(() -> {
for (int i = 0; i < 10; i++) {
print("A", conditionA, conditionB);
}
});
Thread threadB = new Thread(() -> {
for (int i = 0; i < 10; i++) {
print("B", conditionB, conditionC);
}
});
Thread threadC = new Thread(() -> {
for (int i = 0; i < 10; i++) {
print("C", conditionC, conditionA);
}
});
threadA.start();
threadB.start();
threadC.start();
}
private static void print(String str, Condition current, Condition next) {
lock.lock();
try {
while (count % 3 != 0) {
current.await();
}
System.out.print(str);
count++;
next.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
在这个示例中,我们使用了ReentrantLock和Condition来实现线程之间的协作。每个线程在打印自己的字符后,会唤醒下一个线程,并等待自己的下一个轮次。通过这种方式,三个线程可以轮流打印出"abcabcabc..."这样的字符串。
文章来源:https://blog.csdn.net/xuan__xia/article/details/135444741
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!