Есть следующий вопрос: нужна ли синхронизация ресурса,используемых разными потоками, если происходит только чтение ресурса, сам ресурс никак не изменяется. Вот написал на коленке небольшой пример.
public class Test {
static Thread t1;
static Thread t2;
static Thread t3;
public static void main(String[] args) {
t1 = new Thread(new MyThread1());
t2 = new Thread(new MyThread2());
t3 = new Thread(new MyThread3());
t1.start();
t2.start();
t3.start();
}
static class MyThread1 implements Runnable{
@Override
public void run(){
while(true) {
Thread.State state = t3.getState();
boolean isAlive = t3.isAlive();
//исключаем призрачную возможность того, что вывод будет неправильным
synchronized (System.out){
System.out.println(Thread.currentThread().getId() + " - " + state);
}
if(!isAlive)
return;
}
}
}
static class MyThread2 implements Runnable {
@Override
public void run(){
while(true) {
Thread.State state = t3.getState();
boolean isAlive = t3.isAlive();
//исключаем призрачную возможность того, что вывод будет неправильным
synchronized (System.out){
System.out.println(Thread.currentThread().getId() + " - " + state);
}
if(!isAlive)
return;
}
}
}
static class MyThread3 implements Runnable {
@Override
public void run(){
int count = 0;
while(true){
try{
Thread.currentThread().sleep(200);
if(count > 15)
break;
count++;
}
catch (InterruptedException e){
}
}
}
}
}
В данном коде общим ресурсом является
static Thread t3;
В потоках t1 и t2 мы проверяем состояние потока t3
Thread.State state = t3.getState();
boolean isAlive = t3.isAlive();
Может ли тут пойти что-то не так. Допустим 2 потока t1 и t2 попробуют одновременно получить доступ к методу getState(). Если тут все-таки нужна синхронизация, то объясните почему так и что конкретно может пойти не так.
Thread.isAlive()
можно спокойно вызывать без синхронизации. А вот Thread.getState()
не обеспечивает соблюдения happens before, поэтому потоки t1 и t2 без использования синхронизации могут не заметить изменения состояния потока t3.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужно сделать класс, который спрашивает у пользователя целое число, умножает его на 2 и выводит этоПреобразовать полученный от пользователя...
Сделал готовый javaFX проект intellijIDEAЗашел ProjectStructure -> Artifacts -> Add jar
Не понятно как это происходит именно в BottomNavigationViewХотелось бы узнать у более опытных
На сколько мне известно что большинства сертификатов не имеют никакого смыслаНо в то же время слышал что некий вес имеют сертификаты от oracle,...