2013-10-03 4 views
-2

Я знаю некоторые основные понятия в java-многопоточном режиме. Но теперь я хочу создать 5 потоков, которые должны работать одновременно. Как я могу получить время выполнения потока? ... Кто-нибудь, пожалуйста, помогите мне с глубоким концепции потоков, включая методы и цели.Основные понятия java многопоточности

+0

вопрос непонятен – ankit

ответ

2

Ваш вопрос действительно неясен. Что вы подразумеваете под временем выполнения потока? Когда это началось против того, когда оно остановилось (время на стене). Или сколько времени оно выполнялось, не включая время, которое было приостановлено (т. Е. Время процессора)?

Посмотрите на Monitor cpu usage per thread in java?

BTW, Threading не то, что вы можете просто узнать из ответа StackOverflow.

Официальный путеводитель по Java объясняет параллелизм достаточно хорошо: http://docs.oracle.com/javase/tutorial/essential/concurrency/

Книга «Java Параллелизм на практике», даже лучше.

+0

простите за мой неоригинальный. Я до сих пор не понимаю, как мы можем получить фактическое время выполнения потока ?. – TheLostMind

0

Вы можете использовать методы

ThreadMXBean интерфейс

вы можете получить экземпляр с помощью

ManagementFactory.getThreadMXBean(); 

после этого вы можете вызвать метод

getThreadCpuTime (Thread.currentThread(). GetId());

так что ваш код будет выглядеть

ManagementFactory.getThreadMXBean.getThreadCpuTime(Thread.currentThread().getId()); 

подробнее см Docs

1

сделать прокси-сервер

class Proxy implements Runnable { 
    final Runnable target; 

    Proxy(Runnable target) { 
     this.target = target; 
    } 

    public void run() { 
     long t0 = System.currentTimeMillis(); 
     try { 
      target.run(); 
     } finally { 
      System.out.println(Thread.currentThread() + " execution time = " + (System.currentTimeMillis() - t0)); 
     } 
    } 
} 

и использовать его

new Thread(new Proxy(task)).start(); 
0

Что-то вроде этого кода может быть полезно http://blog.sheidaei.com/2013/06/simple-thread-example-in-java.html.

Вы можете использовать System.currentTimeMillis() вместо System.out.println(), чтобы получить время выполнения потоков.

/** 
* Created with IntelliJ IDEA. 
* User: shahin 
* Date: 6/5/13 
* Time: 11:32 PM 
* To change this template use File | Settings | File Templates. 
*/ 
public class SimpleThread implements Runnable{ 

    public SimpleThread(String simpleName) { 
     this.simpleName = simpleName; 
     System.out.println(">>> Constructor for " + getSimpleName()); 
    } 

    public String getSimpleName() { 
     return simpleName; 
    } 

    public void setSimpleName(String simpleName) { 
     this.simpleName = simpleName; 
    } 

    private String simpleName; 
    @Override 
    public void run() { 
     System.out.println(" >> "+getSimpleName() + " started."); 
     try { 
      Thread.sleep(100); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
     } 

     System.out.println(" >> "+getSimpleName() + " stopped."); 
    } 

    public static void main(String args[]) 
    { 
     System.out.println("Main Thread started."); 

     SimpleWaitNotifyThread simpleThread; 
     Thread thread; 
     for(int i=0;i<5;i++) 
     { 
      simpleThread = new SimpleWaitNotifyThread("Thread "+(i+1)); 
      thread = new Thread(simpleThread,"Thread "+(i+1)); 
      thread.start(); 
     } 

     System.out.println("Main Thread finished."); 
    } 
} 
Смежные вопросы