我是使用线程的新手,只是想弄清楚。我的最终游戏是拥有一个 URL 列表,我的程序将一次从列表中获取一个 URL,并使用该 URL 执行操作。会有很多 URL,当一些线程使用同一个列表时,可能会添加这个列表。
为了开始实验和学习,我使用了一个简单的 ArrayList 填充数字,并使用线程池来获取 URL。这是我的代码:
public static void main(String[] args) {
for (int i = 0; i < 200; i++){
test.add(i);
}
SlothTest runner = new SlothTest();
Thread alpha = new Thread(runner);
Thread beta = new Thread(runner);
ExecutorService tasker = Executors.newFixedThreadPool(10);
while (!listEmpty()){
tasker.submit(new SlothTest());
}
tasker.shutdown();
System.out.println("Complete...");
}
@Override
public void run() {
getLink();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
}
}
private synchronized String getLink(){
link = Thread.currentThread().getName() + " printed " + test.indexOf(test.size()-1);
test.remove(test.size()-1);
System.out.println(link);
return link;
}
private synchronized static boolean listEmpty(){
if (test.size() > 0){
return false;
} else {
return true;
}
}
在运行程序并为我的输出获得一些-1 时,我遇到了一些并发问题。我不确定为什么会发生这种情况,我知道我上面的代码很粗糙,但我真的处于学习阶段的多线程应用程序。任何人都可以先帮我解决我的并发问题,然后如果你能给我关于我上面的代码的任何指示,那也很好