Дан код:
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();
)?
Ничего не меняется. Вы можете в этом сами убедится запустив этот код
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);
}
}
}
Нить останавливается из-за исключения.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я получаю значение для spinner из базы данных на сервере и храню его в ArrayList:
Приложение вылетает вот здесь: