Когда записи, которые выполняются одним потоком, видны другому потоку, когда нет синхронизированных блоков и энергозависимых переменных?Вот упрощенный пример быстрой сортировки:
int middle = partitionForTheFirstTime(array);
Thread t = new Thread(new Quicksorter(array, 0, middle - 1));
Thread u = new Thread(new Quicksorter(array, middle + 1, array.size - 1));
t.start()
u.start();
t.join();
u.join();
(Ради простоты предположим, что два «рабочих потока» не порождают никаких дополнительных потоков.)
Объединяется ли с двумяпотоки гарантируют, что текущий поток видит все их побочные эффекты?
Что касается связанной ноты, что произойдет, если я создаю потоки до первоначального разбиения?
Quicksorter a = new Quicksorter();
Quicksorter b = new Quicksorter();
Thread t = new Thread(a);
Thread u = new Thread(b);
int middle = partitionForTheFirstTime(array);
a.setParameters(array, 0, middle - 1);
b.setParameters(array, middle + 1, array.size - 1);
t.start()
u.start();
t.join();
u.join();
Смогут ли два потока увидеть побочные эффекты, вызванные partitionForTheFirstTime()
?Другими словами, создает Поток, имеет ли отношение "случается до", или запускает Поток?