我知道java多线程中的一些基本概念。但是现在我想要创建5个应该同时工作的线程。如何才能获得线程的执行时间?...有人请帮我解决线程的深层概念,包括方法和目的。
答案 0 :(得分:2)
你的问题真的不清楚。你对线程的执行时间是什么意思?当它开始时它停止时(停机时间)或它实际运行了多长时间,不包括它被保持的时间(即CPU时间)?
查看Monitor cpu usage per thread in java?
顺便说一下,线程不是你可以从StackOverflow答案中学到的东西。
Java官方指南很好地解释了并发性: http://docs.oracle.com/javase/tutorial/essential/concurrency/
“实践中的Java并发”一书更加出色。
答案 1 :(得分: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();
答案 2 :(得分:0)
您可以使用
的方法ThreadMxBean 接口
您可以使用
获取实例 ManagementFactory.getThreadMXBean();
之后你可以调用方法
getThreadCpuTime(Thread.currentThread()的getId());
所以你的代码看起来像
ManagementFactory.getThreadMXBean.getThreadCpuTime(Thread.currentThread().getId());
有关详细信息,请参阅Docs
答案 3 :(得分: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.");
}
}