在执行和完成时检索线程ID? Java的

时间:2012-05-14 09:10:50

标签: java multithreading threadpool

如何在执行线程时检索线程的ID,然后在完成时再次检索线程的ID。

从而在主线程中按照执行/完成的顺序打印它们。

我正在使用forkjoinpool并执行可调用的类。

由于

2 个答案:

答案 0 :(得分:1)

您应该向您的任务类添加如下内容:

executorService.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println("Running task in" + Thread.currentThread().getId());
                <your code>
                System.out.println("Finished task in" + Thread.currentThread().getId());
            }
        });

答案 1 :(得分:1)

创建实现Callable的包装器并在其中调用另一个可调用的包装器。但是也可以检索线程ID,并根据需要进行操作,例如:

class ThreadTrackingCallable<V> implements Callable<V> {
    private Callable<V> payload;
    ThreadTrackingCallable(Callable<V> payload) {
        this.payload = payload;
    }
    V call() throws Exception {
       jobStarted(getCurrentThreadId());
       V result = payload.call();
       jobEnded(getCurrentThreadId());
       return result;
    }

    private int getCurrentThreadId() {
        return Thread.currentThread().getId();
    }
}