我使用这个方法来创建数组的副本,但我怀疑,我打开了线程并用新线程发送了数组,如果我不在新线程中创建这个数组的副本,数组可能会改变,这会严重影响我的程序机制。
degersakla = new Integer[10000][1][boyut];
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
new GunlukKontrol(update, data, limit, degersakla, sincetime, untiltime);
}
});
t1.start();
try {
Thread.sleep(400000); // Waiting For new Thread's Copy Operation
} catch (InterruptedException ex) {
Logger.getLogger(UpdateDeneme.class.getName()).log(Level.SEVERE, null, ex);
}
// new Thread
public GunlukKontrol(Object[][][] update, String[][] data, Object[] limit, Integer[][][] degersakla, String sincetime, String untiltime) {
this.degersakla = new Integer[degersakla.length][1][boyut]; // copy method of array
for (int i = 0; i < degersakla.length; i++) {
for (int j = 0; j < 1; j++) {
for (int k = 0; k < boyut; k++) {
this.degersakla[i][j][k] = degersakla[i][j][k];
}
}
}
这是正确的方法吗?
最佳答案
如果在启动第二个线程之后更改第一个线程中的数组,则会出现问题。
必须通过将数组的副本传递给第二个线程来解决该问题。如果让第二个线程复制数组,则无法避免数组上的数据竞争。
关于java - 如何在新线程中创建数组的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21334025/