2016-07-05 30 views
-1

私はmulithreads環境に問題があります。私は正しく実行するいくつかのスレッドを作成することができますが、プロセスは決して終了しません。私は仕上げを待つことができません。 私のスレッドがすべて終了したときに何かしたいのですが、現時点では不可能です。ここに私のコード:スレッドをJavaで待つことができません

public static void main(String[] args){ 

public void run(){ 
      ExecutorService exec = Executors.newFixedThreadPool(10); 
    try { 
       for(int i=0;i<100;i++){ 
        final Integer a=i; 
        try { 
         exec.submit(new Runnable() { 
         @Override 
          public void run() { 

         System.out.println(a); 
         } 
        }); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
      catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 
} 

誰かが私の目標を達成する方法を知っていますか?ありがとう!

+1

を? – Kayaman

+0

なぜスレッド内に新しいスレッドプールを作成していますか?あなたは既に実行するスレッドを持っています。 –

+1

http://stackoverflow.com/questions/1250643/how-to-wait-for-all-threads-to-finish-using-executorserviceもご覧ください。 –

答えて

2

スレッドとExecutorServiceを作成しないでください。それは冗長です。

現在、wait()というメインスレッドが他のスレッドを呼び出さずにnotify()を呼び出しているため、プログラムは終了していません。

あなたはすべてのタスクは、このような何かが完了するまで、メインスレッドが待機する場合:あなたは `)(`通知呼ぶのです

final class EjecutorUpdateContactos { 
    void update() throws Exception { 
    ExecutorService workers = Executors.newFixedThreadPool(10); 
    List<Callable<Void>> tasks = new ArrayList<>(); 
    for(int i = 0; i < 100; i++) { 
     int a = i; 
     tasks.add(new Callable<Void>() { 
     @Override 
     public Void call() { 
      System.out.println(a); 
      return null; 
     } 
     }); 
    } 
    workers.invokeAll(tasks); 
    workers.shutdown(); 
    } 
} 
-2

はこれを試してみてください:

public class EjecutorUpdateContactos extends Thread { 

    @Override 
    public void run() { 
     ExecutorService exec = Executors.newFixedThreadPool(10); 
     try { 
       for (int i = 0; i < 100; i++) { 
       final Integer a = i; 
       try { 
        exec.submit(new Runnable() { 
         @Override 
        public void run() { 

         System.out.println(a); 
        } 
       }); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     notify(); 
    } 
    } 
} 
関連する問題