那些年我们做过的多线程(一)

编程入门 行业动态 更新时间:2024-10-17 13:39:19

那些年我们<a href=https://www.elefans.com/category/jswz/34/1760668.html style=做过的多线程(一)"/>

那些年我们做过的多线程(一)

今天我们来做一道大厂面试的多线程:

看到题面,很容易想到生产消费者模型,可以将字母与数字分别视为生产者以及消费者,每当生产者或者消费者活动一次,则通知另一个线程,由此便很容易得到答案.

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class ConditionTest {static Lock lock = new ReentrantLock();static Thread numThread;static Thread wordThread;static Condition word = lock.newCondition();static Condition num = lock.newCondition();static int count = 26;public static void main(String[] args) {numThread = new num();numThread.start();wordThread = new word();wordThread.start();}}class word extends Thread {public  void  run() {for (int i = 0;i < ConditionTest.count;i++) {try {ConditionTest.lock.lock();System.out.printf("%c\t",'A'+i);ConditionTest.num.signalAll();if (i != ConditionTest.count-1) {ConditionTest.word.await();}ConditionTest.lock.unlock();} catch (InterruptedException e) {e.printStackTrace();}}}
}class num extends  Thread {public void run() {try {for (int i = 1;i <= ConditionTest.count;i++) {ConditionTest.lock.lock();System.out.print(i+"\t");ConditionTest.word.signalAll();if (i != ConditionTest.count) {ConditionTest.num.await();}ConditionTest.lock.unlock();}} catch (Exception e) {e.printStackTrace();}}
}

通过测试也可以验证我们的想法.

更多推荐

那些年我们做过的多线程(一)

本文发布于:2023-07-28 17:54:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1268417.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:做过   多线程

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!