2015-09-19 2 views
-1

Скажите, что у меня есть поток, и я хочу, чтобы он подождал, а затем прервался, чтобы он снова запустился. Однако для моего задания мне не разрешено использовать тег 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 
+1

Вам не нужно синхронизировать метод, вы можете синхронизировать блок кода с общей блокировкой монитора. Рассмотрите возможность предоставления [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам. «CountDownLatch» может «быть другим решением или даже использовать что-то вроде« AtomicBoolean »или« ReentrantLock » – MadProgrammer

ответ

0

Вы можете использовать Thread.sleep(Long.MAX_VALUE). Метод Thread.sleep сбрасывает заданное количество миллисекунд. Long.MAX_VALUE миллисекунды практически бесконечны (сотни миллионов лет). Однако сон будет прерван Thread.interrupt().

+0

Я попытался сделать это, но получаю сообщение об ошибке:« Невозможно сделать статическую ссылку на прерывание нестатического метода() от типа Thread ". Затем я попытался создать объект Thread как «Thread t = new Thread();» и вызывать 't.interrupt();', но это не прерывает мой 'Thread.sleep (10000);' – ArtisticMelody

Смежные вопросы