gpt4 book ai didi

java - 执行程序服务出现问题,列表大小始终为零?

转载 作者:行者123 更新时间:2023-12-01 09:57:24 25 4
gpt4 key购买 nike

我的程序运行成功,但我不知道为什么列表大小始终为零。它不应该为零。虚拟文本============================虚拟文本 =============================虚拟文本 ===========================

package ca.cgi.general;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class Worker implements Runnable {

Random random = new Random();
List<Integer> list1 = new ArrayList<Integer>();
List<Integer> list2 = new ArrayList<Integer>();
Object lock1 = new Object();
Object lock2 = new Object();

private void StageOne() {
synchronized (lock1) {

try {
Thread.sleep(1);
} catch (InterruptedException e) {

e.printStackTrace();
}
list1.add(random.nextInt());
}

}

private void StageTwo() {
synchronized (lock2) {

try {
Thread.sleep(1);
} catch (InterruptedException e) {

e.printStackTrace();
}
list2.add(random.nextInt());
//System.out.println(list2.size());
}
}

public void run() {
System.out.println(Thread.currentThread().getName());
for (int i = 1; i <= 1000; i++) {
StageOne();
StageTwo();
}

}

public void decession() throws InterruptedException {
long startTime = System.currentTimeMillis();

ExecutorService executorService = Executors.newFixedThreadPool(2);
for (int i = 0; i < 2; i++) {
executorService.submit(new Worker());
}
executorService.shutdown();
executorService.awaitTermination(15, TimeUnit.DAYS);
System.out.println("All task comleted");
long endTime = System.currentTimeMillis();
System.out.println("Time Taken:" + (endTime - startTime));

System.out.println("List1 " + list1.size());
System.out.println("List2 " + list2.size());


}

}

package ca.cgi.general;

public class TestThread {
public static void main(String[] args) {
try {
new Worker().decession();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

最佳答案

您创建了 3 个 Worker 实例:第一个位于 main 中。它的列表永远不会被触及,并且最终是您决定打印的列表。

在决策方法中,您创建两个新的 Workers,每个都有自己的列表。每个工作人员仅更改其列表 - 但这些更改永远不会反射(reflect)在主工作人员的列表中。

长话短说,您需要在所有工作人员之间“共享”这些列表:使这些列表静态且最终。这应该可以解决它。

关于java - 执行程序服务出现问题,列表大小始终为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37085813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com