2015-05-13 4 views
1

Я бег простой программы и здесь необходимо войтиСколько потоков работает в моей программе java?

Total Thread : 6 // using Thread.activeCount() 
pool-1-thread-143 

Вот класс

public class Test implements Runnable{ 

    String    ul; 
    ExecutorService  threadPool; 
    public Test(String s, ExecutorService executor) 
    { 
     this.ul = s; 
     threadPool = executor; 
    } 

    public void run() { 
     try { 
      Fun(ul); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 

    private void Fun(String ss) throws IOException 
    { 

    // .... 
     System.out.println("Total Thread : "+Thread.activeCount()); 
     Iterator iterator = links.iterator(); 
     while(iterator.hasNext()) 
     { 
      Element ele = iterator.next(); 
      String s = ele.getprop("...."); 
      if(!Model.condition(s)) 
      { 
       System.out.println(Thread.currentThread().getName()); 
       threadPool.execute(new Test(s, threadPool)); 
      } 
     }   
    } 
} 

Здесь Main.java

ExecutorService executor = Executors.newFixedThreadPool(5);   
    executor.execute(new Test("this is something", executor));   
    while (!executor.isTerminated()) { }   

Так сколько фактический потока выполняется с помощью моей программы ? Я применил executor.execute() правильно в этой программе?

+1

В чем Ваш вопрос? – Lokesh

+0

О, я обновил свой вопрос – manish

+0

Я не вижу в классе кода, который вы передаете, для выполнения метода. – Lokesh

ответ

1

Один поток для основной программы и пять потоков в бассейне в общей сложности 6, как вы видите. И это отлично подходит для Threadpool, хотя кажется немного запутанным, что Test выполняет новый Test?!

Приветствия,

+0

'pool-1-thread-143' что это значит? – manish

+0

1-й пул и некоторый порядковый номер для потока. Дело не в том, что есть 143 текущих потока, но более 143 потоков были запущены с течением времени, и большинство из них завершили –

+0

'threadPool.execute (новый Test (s, threadPool)); таким образом, на самом деле я хочу запустить задачу, используя тот же пул потоков – manish

1

Executors вызов создает размер пула потоков из 5. неподвижную приложение запускается на main нить ... Таким образом, 5 + 1 = 6

+0

whats it 'pool-1-thread-143' – manish

+0

из вашего кода' Thread.currentThread(). getName() '-> имя текущей нити – sodik

0

Внедрение кода немного неуклюжим. Эта часть выглядит немного уродливой threadPool.execute(new Test(s, threadPool));, поскольку вы передаете ссылку переменной как параметр, который сам вызывает вызов метода.

Я предпочел бы сохранить исполнитель пула потоков вне класса Test и передать ему несколько экземпляров тестового класса.

Подсчитайте, как объяснено в ответах выше, это 5 + 1 основная тема.

Вот как я это сделаю. Основной метод может быть дополнительно улучшен путем добавления большей модульности, но цель заключается в том, что ThreadPool должен существовать вне реализации Runnable.

public class Test implements Runnable{ 

    String    ul;  
    public Test(String s) 
    { 
     this.ul = s;   
    } 

    public void run() { 
     try { 
      Fun(ul); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 

    private void Fun(String ss) throws IOException 
    { 

    // .... 
     System.out.println("Total Thread : "+Thread.activeCount()); 

     System.out.println(Thread.currentThread().getName()); 

     }   
    } 
} 

public class MyRunnerClass { 

    public static void main(String args[]){ 
    ExecutorService executor = Executors.newFixedThreadPool(5); 
    String s = "this is something"; 

     Iterator iterator = links.iterator(); 
     while(iterator.hasNext()) 
     { 
      Element ele = iterator.next(); 
      String s = ele.getprop("...."); 
      if(!Model.condition(s)) 
      {    
       executor.execute(new Test(s, threadPool)); 
      } 
     } 

    } 
} 
+0

Что вы будете использовать для этого кода? – manish

+0

Ваш код будет выполнять эту работу, но не будет уведомлен, так как это может затруднить отладку и дальнейшее расширение. – Lokesh

+0

Можете ли вы PLS улучшить его? – manish

Смежные вопросы