1700450977
1700450978
System.out.println(”***开始执行”+clz.getSimpleName()+“任务****”);
1700450979
1700450980
//启动三个线程
1700450981
1700450982
for(int i=0;i<3;i++){
1700450983
1700450984
es.submit(clz.newInstance());
1700450985
1700450986
}
1700450987
1700450988
//等待足够长的时间,然后关闭执行器
1700450989
1700450990
TimeUnit.SECONDS.sleep(10);
1700450991
1700450992
System.out.println(”––”+clz.getSimpleName()+“任务执行完毕–—\n”);
1700450993
1700450994
//关闭执行器
1700450995
1700450996
es.shutdown();
1700450997
1700450998
}
1700450999
1700451000
public static void main(String[]args)throws Exception{
1700451001
1700451002
//运行显式锁任务
1700451003
1700451004
runTasks(TaskWithLock.class);
1700451005
1700451006
//运行内部锁任务
1700451007
1700451008
runTasks(TaskWithSync.class);
1700451009
1700451010
}
1700451011
1700451012
按照一般的理解,Lock和synchronized的处理方式是相同的,输出应该没有差别,但是很遗憾的是,输出差别其实很大。输出如下:
1700451013
1700451014
*****开始执行TaskWithLock任务******
1700451015
1700451016
线程名称:pool-1-thread-1,执行时间:33 s
1700451017
1700451018
线程名称:pool-1-thread-2,执行时间:33 s
1700451019
1700451020
线程名称:pool-1-thread-3,执行时间:33 s
1700451021
1700451022
––TaskWithLock任务执行完毕–—
1700451023
1700451024
*****开始执行TaskWithSync任务******
1700451025
1700451026
线程名称:pool-2-thread-1,执行时间:43 s
[
上一页 ]
[ :1.700450977e+09 ]
[
下一页 ]