Я относительно новый Threading в java, и я пытался выполнить следующую работу. Будут запущены две нитки. Thread1 будет печатать от 1 до 10, а затем ждать, пока Thread2 завершит печать 11-20, а затем завершит свою задачу и сообщит thread1 для печати 21-30, а затем прекратит работу thread1. Это код, который я использовал:Ждите, пока один нить закончится в java
private Thread thread = null;
private String name = null;
private static Object obj = new Object();
private static int index = 1;
public childThread(Thread t, String name)
{
this.name = name;
this.thread = t;
}
public void run()
{
try
{
while (true) {
Thread.sleep(500);
if (index % 10 == 0 && index == 10) {
System.out.println("Waiting for Thread2");
synchronized (obj) {
obj.notify();
obj.wait();
}
}
else if (index % 10 == 0 && index == 20) {
System.out.println("Waiting for Thread1");
synchronized (obj) {
obj.notify();
obj.wait();
}
}
else if(index == 30)
{
obj.wait();
}
synchronized (obj) {
System.out.println(name + " ><>< " + index);
index++;
}
}
}
catch(Exception e)
{
}
И я получаю следующий результат:
Thread2 ><>< 1
Thread1 ><>< 2
Thread2 ><>< 3
Thread1 ><>< 4
Thread2 ><>< 5
Thread1 ><>< 6
Thread1 ><>< 7
Thread2 ><>< 8
Thread2 ><>< 9
Thread1 ><>< 10
Thread2 ><>< 11
Thread1 ><>< 12
Thread2 ><>< 13
Thread1 ><>< 14
Thread2 ><>< 15
Thread1 ><>< 16
Thread2 ><>< 17
Thread1 ><>< 18
Thread2 ><>< 19
Waiting for Thread1
Waiting for Thread1
Thread1 ><>< 20
Thread1 ><>< 21
Thread1 ><>< 22
Thread1 ><>< 23
Thread1 ><>< 24
Thread1 ><>< 25
Thread1 ><>< 26
Thread1 ><>< 27
Thread1 ><>< 28
Thread1 ><>< 29
на основе моего понимания в Java многопоточности.
, если (индекс 10% == 0 & & индекс == 10) блок будет уведомлять другую нить для запуска и ждать, пока другая завершена и же самое для второго. Теперь это не работает в первый раз. Но когда index == 20, thread2 перестает работать, а thread1 продолжает печатать30.
Благодарим за помощь. :)
'ожидания() и' Notify() 'являются низкими примитивы синхронизации уровня. Если вы хотите подождать действия другого потока, тогда обычно вы хотите либо 'java.util.concurrent.Semaphore', либо' java.util.concurrent.CountDownLatch' – NamshubWriter