在下面的代码中,CWriteData类将数据写入文件,CBelowThreshold读取同一文件并打印一些数据,CAboveThreshold也读取同一文件并打印一些 数据
我希望代码崩溃,因为我没有使用synchronized块,但是当我运行代码时它正常工作。
你能解释为什么代码尽管文件在三个线程之间共享并且没有同步,但它没有崩溃
代码
public static void main(String[] args) throws IOException, InterruptedException {
file = IOCtrl.createFile("sharedRes.txt", "c:" + File.separator);
ScheduledExecutorService executor = Executors.newScheduledThreadPool(3);
//synchronized (file) {
executor.schedule(new CWriteData(file), 0, TimeUnit.SECONDS);
//}
//synchronized (file) {
executor.schedule(new CBelowThreshold(file), 1, TimeUnit.SECONDS);
//}
//synchronized (file) {
executor.schedule(new CAboveThreshold(file), 1, TimeUnit.SECONDS);
//}
}