私はスレッドを使用するのは初めてで、物事を理解しようとしているだけです。私の最終的なゲームはURLのリストを作成することです。私のプログラムは、リストから一度に1つの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を取得しているときに、いくつかの同時実行の問題が発生しています。なぜこれが起こっているのかわかりません。上記のコードは大雑把ですが、私は実際にマルチスレッドアプリの学習段階にあります。誰かが最初に私の並行性の問題を修正するのを手伝ってくれますか?それからあなたが私の上記のコードについてのポインタを私に与えることができればそれも素晴らしいでしょう