Я прочитал документ оракула о синхронизированных методах и о том, как они могут ввести блокировку в многопоточную программу, но есть одна вещь, которая неясна для меня. Являются ли последующие вызовы уже заблокированным методам в очереди?делать синхронизированные вызовы очереди java?
Допустим, у нас есть класс:
class Astore {
...
public synchronized void a() {
doSomethingTimeConsuming();
}
...
}
и 3 нити, которые называют astore.a()
final Astore astore = new Astore();
Thread t1 = new Thread(new Runnable() {
public void run() {
astore.a();
doSomethingElse();
astore.a();
}
});
t1.start();
Thread t2 = new Thread(new Runnable() {
public void run() {
astore.a();
}
});
t2.start();
Thread t3 = new Thread(new Runnable() {
public void run() {
astore.a();
}
});
t3.start();
я не уверен, если я сделал пример правильно, но дело в том, что три потока одновременно обращаются к одному и тому же объекту с синхронизированным методом.
Будет ли порядок операций храниться в очереди, так что нити, призывающие будет:
- t1 (как его называли первым)
- t2 (был вызван после того, как T1)
- t3
- t1 снова (он был занят чем-то с A уже в то время как другие потоки запрошенный метод)
Могу ли я с уверенностью предположить, что будет б (или, что еще хуже, t2 и t3 могут быть вызваны в случайном порядке)
Какова наилучшая практика, когда нескольким потокам может понадобиться обмениваться данными (например, сервер сокетов с одним потоком для каждого активного соединения - я не хочу, чтобы 6 клиентов выходили из таймаута, ожидая, когда первый завершит огромную загрузку в общую структуру данных)
'Какая наилучшая практика, когда нескольким потокам может потребоваться совместное использование данных (например, сервер сокетов с одним потоком для каждого активного соединения? Это вопрос в миллиард долларов.Целые библиотеки могут быть заполнены книгами только по одному предмету. Более конкретный вопрос с большей вероятностью будет дан. – biziclop
В конкретном случае, о котором вы спрашивали, вам необходимо уменьшить размер вашего куска и/или отделить процессы загрузки и импорта. – chrylis
... или если структура данных огромна, вы можете сохранить ее в базе данных в любом случае, и в этот момент мы говорим об обработке транзакций. – biziclop