当没有同步块和易失性变量时,一个线程执行的写入何时对另一个线程可见?这是一个简化的快速排序示例:
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()
吗?换句话说,创建线程是否会产生先发生关系,还是启动线程?