После прочтения семафоров я попробовал этот тестовый код, в котором я создаю два потока A и B. Моя цель - позволить потоку A ждать 10 секунд для завершения какой-либо операции в потоке B.Но так как я немного изменил логику в потоке B, введя бесконечный цикл while, который никогда не выходит, поток A также зависает, и программа работает вечно.Кто-нибудь может мне помочь, как достичь цели, которую я ищу?
пакет;
import java.util.concurrent.Semaphore;
public class Concurrency {
public int count = 0;
public static void main(String args[]) throws Exception {
final Semaphore sem = new Semaphore(1, true);
Thread thrdA, thrdB;
thrdA = new Thread(new Runnable() {
@Override
public void run() {
synchronized (sem) {
try {
sem.wait(10000);
System.out.println("thread1");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thrdB = new Thread(new Runnable() {
@Override
public void run() {
synchronized (sem) {
System.out.println("thread2");
while(true){
}
}
}
});
thrdA.start();
thrdB.start();
thrdA.join();
thrdB.join();
}
}