2014-09-04 2 views
2

У меня есть несколько вопросов по поводу он следующего кода:управления различных экземпляров нити

final Runnable accept = new Runnable() { 
    public void run() { 
     while (connect == true) { 
      try { 
       sock = servsock.accept(); 
      } 
      catch (Exception e) { 
       System.out.println(e); 
      } 
     } 
    } 
}; 

new Thread(accept).start();  //creates new instance every time i want to run accept() 

Престола, каждый раз, когда я хочу запустить «принять», я создаю новый экземпляр нити и запустить его. Может кто-нибудь сказать мне, как остановить один из этих потоков? Как, как я идентифицирую поток? Должен ли я использовать массив потоков?

+6

Выражение 'new Thread()' разрешает ссылку на новый объект 'Thread'. Сохраните это в переменной, и вы получите доступ к ней позже. –

+0

Возможно, вы хотите использовать синглтон? – PKlumpp

ответ

1

Лучший способ принять сокеты на ServerSocket - запустить цикл accept в 1 потоке, а затем передать вновь созданный/принятый сокет в другой поток.

Как остановить ваши темы? Самый простой способ - закрыть сокеты, которые они прослушивают.

0

Если вы пытаетесь сохранить пул потоков, посмотрите на java.util.concurrent.ExecutorService и java.util.concurrent.Executors, там есть множество примеров использования.

1

Вы используете JDK 7? Как насчет этого подхода?

ExecutorService tPool = Executors.newFixedThreadPool(5); 
    InterruptableTask task = new InterruptableTask(); 

    Map<Integer, InterruptableTask> tasks = new HashMap<Integer, InterruptableTask>(); 
    tasks.put(0, task); 

    Future future = tPool.submit(task); 
    // something is executed here... 

    InterruptableTask it = tasks.get(0); 
    it.suspend(); 
Смежные вопросы