数组访问子线程java

时间:2016-12-08 22:08:52

标签: java arrays multithreading

我有一个SinglePDFPage对象数组,它们只是包装对象,每个对象都包含一个WritableImage对象。

在子线程内部的循环中填充它时,我仍然可以访问线程外部的数组。字面上同时。我正在渲染WritableImage对象,每个对象都包含一个PDF页面。这大约需要半秒钟。

在填充该数组时,我可以访问它并在子线程循环到达之前对某个页面进行预渲染。

我已阅读有关volatile关键字和同步集合的内容;如果您有不同线程访问的对象,我认为这是必需的。我以为通常将对象写入线程存储?如果是这样,为什么我可以在没有任何锁定或同步的情况下访问它们?

所描述的模式是否是"线程安全的"?

1 个答案:

答案 0 :(得分:1)

这个问题有点抽象,所以我会在抽象层面上发言。

线程安全并不是指跨线程访问数据的能力。它指的是安全,也就是说,其他线程无法以无效状态查看数据。您的代码是线程安全的,因为其他线程在完全填充之前可以看到您的数组。 volatilesynchronized,并发集合和实用程序是工具,可帮助您控制对线程之间共享状态的访问。