Я сделал это образец для тестирования ждать/уведомит функциональные возможности:Подождите, не таймаут
public class WaitingTest implements Runnable {
Thread b = new Thread(this,"query");
int total=0;
public static void main(String[] args){
WaitingTest w = new WaitingTest();
}
public WaitingTest(){
b.start();
synchronized(b){
try{
System.out.println("Waiting for b to complete...");
b.wait(10);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("Total is: " + total);
}
}
@Override
public void run(){
synchronized(b){
for(int i=0; i<1000000000 ; i++){
total += i;
}
}
}
}
Проблема заключается в том, мой вывод должен быть равен нулю, так как Im уведомляющее ждать после 10мс и моя нить занимает больше времени, чем это выполнять свою работу. Итак, мой вывод должен быть нулевым, вместо этого он приходит к другому значению. Что мне не хватает?
EDIT:
public class WaitingTest implements Runnable {
Thread b = new Thread(this,"query");
int total=0;
public static void main(String[] args){
WaitingTest w = new WaitingTest();
}
public WaitingTest(){
b.start();
synchronized(b){
try{
System.out.println("Waiting for b to complete...");
b.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("Total is: " + total);
}
}
@Override
public void run(){
synchronized(b){
b.notify();
for(long i=0; i<100000 ; i++){
total += i;
}
}
}
}
Там нет необходимости добавлять основной тег в названии. –
@VictorOliveira На вашем EDIT - несмотря на то, что вы теперь вызываете b.notify() перед циклом, вы все равно не можете получить нуль (в потоке печати), потому что вы еще не покинули синхронизированный блок (в расчетном потоке) , –