看看你们是否可以解决这个问题。这让我疯了。
我有一个Class的2个实例,它有私有实例File
个变量(非静态,非易失性)
private File tmpF;
然后在同一个池中的不同线程中执行每个实例。
实例1和2都创建临时文件并将其分配给其File
变量(非静态)。我打电话了
tmpF = File.createTempFile("myTempFile" + unique_Id)
在临时文件创建之前,我使用IntelliJ IDEA进行了调试,并验证每个线程都有不同的unique_Id
。
这是让我疯狂的原因。当后一个线程创建临时文件并将其分配给自己的tmpF
变量时,较早的线程tmpF
变量的值更改为后一个线程的tmpF值。当tmpF
不是静态时,这怎么可能?
当我尝试将变量更改为本地方法变量时。问题消失了...所以它肯定与类字段的事实有关。添加synchronized不是有趣的。
答案 0 :(得分:0)
问题听起来就像是在线程之间共享可变数据,这应该在并发环境中避免,正如Brian Goetz的书,Java Concurrency in Practice。根据您的限制,您有几种不同的选择。
private final File tmpF;
),确保它实例化一次。该文件可以从工厂类注入。希望有所帮助。