Java 创建线程和同步所需的时间

Java 创建线程和同步所需的时间,java,multithreading,synchronization,creation,callable,Java,Multithreading,Synchronization,Creation,Callable,我试图找出线程创建和同步所需的时间。我知道我应该使用ThreadMXBean,但我找不到使用ThreadMXBean和可调用接口来演示这一点的简单示例 package teststckofw; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.uti

我试图找出线程创建和同步所需的时间。我知道我应该使用ThreadMXBean,但我找不到使用ThreadMXBean和可调用接口来演示这一点的简单示例

package teststckofw;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class TestStckOfw {

    public static void main(String[] args) throws ExecutionException {
        int i = 0;
        int processed = 0;
        while (i < 10) {
            Parallel parallel1 = new Parallel();
            Parallel parallel2 = new Parallel();

            ExecutorService exec1 = Executors.newCachedThreadPool();
            List<Callable<Integer>> tasks1 = new ArrayList<>();
            try {
                tasks1.add(parallel1);
                tasks1.add(parallel2);
                try {
                    List<Future<Integer>> futures = exec1.invokeAll(tasks1);
                    int flag = 0;
                    for (Future<Integer> f : futures) {
                        Integer res = f.get();
                        if (res != 0) {
                            processed = res;
                        }
                        if (!f.isDone()) {
                            flag = 1;
                        }
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            } finally {
                exec1.shutdown();
            }
            i++;
        }
    }
    /**************************************/
    static class Parallel implements Callable<Integer> {
        @Override
        public Integer call() throws Exception {            
            int a = 2 + 2;  // do something...
            return a;
        }
    }  
}
包测试stckofw;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.concurrent.Callable;
导入java.util.concurrent.ExecutionException;
导入java.util.concurrent.ExecutorService;
导入java.util.concurrent.Executors;
导入java.util.concurrent.Future;
公共类TestStckOfw{
公共静态void main(字符串[]args)引发ExecutionException{
int i=0;
int=0;
而(i<10){
Parallel Parallel 1=新的Parallel();
Parallel parallel2=新的Parallel();
ExecutorService exec1=Executors.newCachedThreadPool();
List tasks1=new ArrayList();
试一试{
任务1.添加(1);
任务1.添加(2);
试一试{
List futures=exec1.invokeAll(tasks1);
int标志=0;
for(未来f:未来){
整数res=f.get();
如果(res!=0){
已处理=res;
}
如果(!f.isDone()){
flag=1;
}
}
}捕捉(中断异常e){
e、 printStackTrace();
}
}最后{
exec1.shutdown();
}
i++;
}
}
/**************************************/
静态类并行实现可调用{
@凌驾
公共整数调用()引发异常{
int a=2+2;//做点什么。。。
返回a;
}
}  
}
编辑:
在长时间的while循环中,我需要许多迭代(远远超过10次)的所有线程的信息。我可以通过使用线程转储获得所有迭代中所有线程的摘要信息吗

除非出于好奇而想知道,否则如果不创建过多的线程(即正确使用
Executor
framework或手动正确执行),您可能会认为线程创建时间可以忽略不计

关于锁争用所花费的时间,它随应用程序负载而变化。获取有用信息的最佳方法是在加载应用程序时进行线程转储,并查找处于阻塞状态的线程和处于可运行状态的线程。通过这种方式,您将了解您的程序在锁争用方面有多好