Проверить состояние потока java

484
28 октября 2017, 15:06

Необходимо написать 2 потока. Поток А с переодичностью в 10 секунд будет переключаться из состояния "позволено" в состояние "не позволено", и 2 поток который будет ждать состояние Потока А "позволено" и начинать отсчет от 10, и останавливает свое действие как только состояние потока А смениться на состояние "не позволено". Как лучше это сделать. Подумал, что в потоке А ввести переменную значение которой будет меняться. Но как мне тогда в потоке В определять текущее значение переменной потока А. Посоветуйте в каком направлении копать или как лучше сделать. Заранее спасибо. Код потока А:

class A extends Thread{ 
    public boolean isAllowed=false;
    A(){
    }
    public void run(){
       for(int i=0; i<10; i++){
          try {
              Thread.sleep(10000);
              isAllowed=true;
          } catch (InterruptedException e) {
              System.err.println(e);
          }
       }
    }
}
Answer 1

Можно использовать, например, общую переменную AtomicBoolean

class A extends Thread{ 
    private final AtomicBoolean isAllowed;
    A(AtomicBoolean isAllowed){
       this.isAllowed = isAllowed;
    }
    public void run(){
       for(int i=0; i<10; i++){
          try {
              Thread.sleep(10000);
              isAllowed.set(i % 2);
          } catch (InterruptedException e) {
              System.err.println(e);
          }
       }
    }
}
class B extends Thread{ 
    private final AtomicBoolean isAllowed;
    B(AtomicBoolean isAllowed){
       this.isAllowed = isAllowed;
    }
    public void run(){
       if(isAllowed.get()) {
          ...
       }
    }
}
READ ALSO
Address of bluetooth adapter on Android8

Address of bluetooth adapter on Android8

Неожиданно обнаружил неработающий код при тестировании под Андроид8

273
Получение и передача имени/фамилии на русском языке VK API

Получение и передача имени/фамилии на русском языке VK API

Получаю информацию о юзере c помощью такого запроса:

243