Скажите, что у меня есть поток, и я хочу, чтобы он подождал, а затем прервался, чтобы он снова запустился. Однако для моего задания мне не разрешено использовать тег Synchronized
для моего метода. Есть ли другой способ сделать то, что я хочу, используя wait()
или, возможно, другой встроенный метод? Или это сложнее? Спасибо!Есть ли способ использовать wait() или interrupt() без Syncronized?
public void run()
{
int counter = 0;
Thread t = new Thread();
while(counter < 1){
sleepTime = generator.nextInt((3000-200)+1)+200;
withdrawAmount = generator.nextInt(50-1+1)+1;
balance = BalanceCall.getBalance();
if ((balance - withdrawAmount) > 0){
t.interrupt();
balance = BalanceCall.updateBalance(withdrawAmount, "Withdraw");
System.out.print(" " + threadName + " withdraws $" + withdrawAmount + " Balance is $" + balance + "\n");
}
else{
System.out.print(" " + threadName + " withdraws $" + withdrawAmount + " Withdrawal - Blocked - Insufficient Funds\n");
try {
Thread.sleep(100000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(sleepTime);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
} // end method run
Вам не нужно синхронизировать метод, вы можете синхронизировать блок кода с общей блокировкой монитора. Рассмотрите возможность предоставления [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам. «CountDownLatch» может «быть другим решением или даже использовать что-то вроде« AtomicBoolean »или« ReentrantLock » – MadProgrammer