做过的多线程(一)"/>
那些年我们做过的多线程(一)
今天我们来做一道大厂面试的多线程:
看到题面,很容易想到生产消费者模型,可以将字母与数字分别视为生产者以及消费者,每当生产者或者消费者活动一次,则通知另一个线程,由此便很容易得到答案.
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();}}
}
通过测试也可以验证我们的想法.
更多推荐
那些年我们做过的多线程(一)
发布评论