java - 如何在新线程中创建数组的副本

标签 java arrays multithreading copy

我使用这个方法来创建数组的副本,但我怀疑,我打开了线程并用新线程发送了数组,如果我不在新线程中创建这个数组的副本,数组可能会改变,这会严重影响我的程序机制。

   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/

相关文章:

java - 无法将 Weblogic 结构类型转换为 Oracle 结构类型

mysql - 如何将带逗号的字符串(VARCHAR)传递给存储过程?

javascript - 我应该如何将 javascript 中的数组数组作为单值数组?

php - mysqli_fetch_array() foreach 循环重复

java - 为什么 Thread 类不是最终的?你为什么要扩展一个线程?

java - 如何在文本 block 中处理意图(Java 13)

java和线程: very strange behaviour

c - 在 C 中调试递归线程调用

C#将方法名称传递给带有变量的参数化threadstart

java - Drools - 使用 map 时解析器错误