2016-07-04 18 views
2

私は15種類のスレッドをすべて実行しており、ユーザーからの動的入力があります。私のJButtonが押されたときにのみ、これらのスレッドが動くようにする必要があります。私は、ボタンのコードを供給しなかったことを知っていますが、その単純な減速です。jbuttonからスレッドを開始する最も良い方法は?

JButton JButton_Button1 = new JButton("Start");

は、私はちょうどあなたが15件のスレッドが実行されているために探している場合は、スレッドがJButton_Button1

new Thread() { 
     int counter = 10; 
     public void run() { 
      while(counter >= 0) { 
       JLabel_MistyvaleLoot.setText("Test" + (counter--)); 
       try{ 
        Thread.sleep(1000); 
       } catch(Exception e) {} 
      } 
     } 
    }.start(); 
+0

なぜ15本のスレッドがありますか? –

+0

@VinceEmigh私は同時に15台のレンタルタイマーを実行する必要があります – Jakob991

+1

私はあなたが1つのスレッドですべてのタイマーを処理できると確信しています。 1つのスレッドで複数の値を更新できるので、1つのスレッドがすべてのレンタルタイマーのクロックとして機能するのはなぜですか?現実の世界では、15カ所の家主には15クロックを要しません。コンテキスト切り替えの量を減らし、プログラムをスピードアップします(CPUは多くのスレッドに分散されないため、スレッドを少なくしてメモリを節約します)。スレッド数は15ですが、非常に多くのコアを持つCPUが1つしかないことに注意してください。 –

答えて

0

クリックされたときにのみ起動したいのですが、あなたは彼らがしたい1より多くの時間を明確にするために、 JButtonが押された場合を除いては、固定サイズのスレッドプールの使用を検討してください。試してみてください:

private ExecutorService threadPool = Executors.newFixedThreadPool(15); 

これは、タスクをサブミットするまでアイドル状態になる15個の処理スレッドを構成します。 JButtonが押されたときにタスクを送信する場合は、ActionListenerを追加する必要があります。つまり、これは試してみてください。

JButton jButton1 = new JButton("Start"); 
jButton1.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent event){ 
     threadPool.submit(new Runnable(){ 
      int counter = 10; 
      public void run() { 
       while(counter >= 0) { 
        JLabel_MistyvaleLoot.setText("Test" + (counter--)); 
        try { 
         Thread.sleep(1000); 
        } catch(InterruptedException e) { 

        } 
       } 
      } 
     }); 
    } 
}); 

タスクを実行するために、15件のスレッドのいずれかを取得するには、あなたがthreadPool.submit()を呼び出し、クリックに対応するためのボタンを取得するには、あなたがjButton1.addActionListener()を呼び出します。

関連する問題