java多线程的核心概念

时间:2013-10-03 05:11:27

标签: java multithreading

我知道java多线程中的一些基本概念。但是现在我想要创建5个应该同时工作的线程。如何才能获得线程的执行时间?...有人请帮我解决线程的深层概念,包括方法和目的。

4 个答案:

答案 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.");
    }
}