2016-07-04 3 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 개의 스레드가 있습니까? 조금 exsessive 같아요 –

+0

@ VinceEmigh 나는 15 타이머를 임대 동시에 렌탈해야합니다 – Jakob991

+1

나는 꽤 당신이 1 스레드에서 모든 타이머를 처리 할 수 ​​확신합니다. 단일 스레드가 여러 값을 업데이트 할 수 있으므로 모든 임대 타이머에 대해 하나의 스레드가 시계로 작동하지 않는 이유는 무엇입니까? 현실 세계에서는 15 곳의 집주인이되는 데 15 클럭이 필요하지 않습니다. 이것은 컨텍스트 스위칭의 양을 줄이고 프로그램 속도를 높일 것입니다 (CPU가 많은 쓰레드에 퍼지지 않을 것이고 메모리는 쓰레드를 줄임으로써 절약 될 것입니다). 15 개의 스레드가 있더라도 매우 많은 코어를 가진 CPU가 1 개 밖에 없다는 것을 명심하십시오. –

답변

0

을 클릭 할 때에 만 시작하고 싶어하지만, 당신이 그 (것)들을 원하는 한 번 더 명확히하기 위해 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) { 

        } 
       } 
      } 
     }); 
    } 
}); 

가 작업을 실행하는 다섯 개 스레드 중 하나를 얻으려면, 당신은 threadPool.submit() 전화 버튼을 클릭에 응답 얻을, 당신은 jButton1.addActionListener()를 호출합니다.

관련 문제