Не понимаю почему работает одна строка

387
31 декабря 2016, 14:27

Дан код:

public class Solution {
  public static byte countThreads = 3;
  static List<Thread> threads = new ArrayList<Thread>(countThreads);
  public static void main(String[] args) throws InterruptedException {
    initThreadsAndStart();
    Thread.sleep(3000);
    ourInterruptMethod();
  }
  public static void ourInterruptMethod() {
    for (int i = 0; i < countThreads; i++) {
        threads.get(i).interrupt();
    }
    //add your code here - добавь код тут
  }
  private static void initThreadsAndStart() {
    Water water = new Water("water");
    for (int i = 0; i < countThreads; i++) {
        threads.add(new Thread(water, "#" + i));
    }
    for (int i = 0; i < countThreads; i++) {
        threads.get(i).start();
    }
  }
  public static class Water implements Runnable {
    private String commonResource;
    public Water(String commonResource) {
        this.commonResource = commonResource;
    }
    public void run() {
        //fix 2 variables - исправь 2 переменных
        boolean isCurrentThreadInterrupted = Thread.currentThread().interrupted();
        String threadName = Thread.currentThread().getName();
        try {
            while (!isCurrentThreadInterrupted) {
                System.out.println("Объект " + commonResource + ", нить " + threadName);
                Thread.sleep(1000);
            }
        } catch (InterruptedException e) {
        }
    }
  }
}

Вопрос:почему когда у вспомогательной нити вызвали интерупт УЖЕ инициализированная переменная isCurrentThreadInterrupted сменила свое значение ПОСЛЕ начальной инициализации(boolean isCurrentThreadInterrupted = Thread.currentThread().interrupted();)?

Answer 1

Ничего не меняется. Вы можете в этом сами убедится запустив этот код

import java.util.ArrayList;
import java.util.List;
public class Solution {
    public static byte countThreads = 3;
    static List<Thread> threads = new ArrayList<Thread>(countThreads);
    public static void main(String[] args) throws InterruptedException {
        initThreadsAndStart();
        Thread.sleep(3000);
        ourInterruptMethod();
    }
    public static void ourInterruptMethod() {
        for (int i = 0; i < countThreads; i++) {
            threads.get(i).interrupt();
        }
    }
    private static void initThreadsAndStart() {
        Water water = new Water("water");
        for (int i = 0; i < countThreads; i++) {
            threads.add(new Thread(water, "#" + i));
        }
        for (int i = 0; i < countThreads; i++) {
            threads.get(i).start();
        }
    }
}
class Water implements Runnable {
    private String commonResource;
    public Water(String commonResource) {
        this.commonResource = commonResource;
    }
    public void run() {
        boolean isCurrentThreadInterrupted = Thread.currentThread().interrupted();
        String threadName = Thread.currentThread().getName();
        try {
            while (!isCurrentThreadInterrupted) {
                System.out.println("Объект " + commonResource + ", нить " + threadName + " interrupted? " + isCurrentThreadInterrupted);
                Thread.sleep(1000);
            }
        } catch (InterruptedException e) {
            System.out.println("нить " + threadName + " исключение " + e);
        }
    }
}

Нить останавливается из-за исключения.

READ ALSO
SQL скрипт для создания БД

SQL скрипт для создания БД

Решаю тестовое задание и у меня там есть такой пункт:

740
Android spinner

Android spinner

Я получаю значение для spinner из базы данных на сервере и храню его в ArrayList:

486
Вылетает Android приложение: Could not execute method for android:onClick

Вылетает Android приложение: Could not execute method for android:onClick

Приложение вылетает вот здесь:

461
The type javax.swing.JComponent cannot be resolved

The type javax.swing.JComponent cannot be resolved

У меня странная ошибка кода:

858