打字猴:1.700450927e+09
1700450927
1700450928 try{
1700450929
1700450930 //开始锁定
1700450931
1700450932 lock.lock();
1700450933
1700450934 doSomething();
1700450935
1700450936 }finally{
1700450937
1700450938 //释放锁
1700450939
1700450940 lock.unlock();
1700450941
1700450942 }
1700450943
1700450944 }
1700450945
1700450946 }
1700450947
1700450948 这里有一点需要说明的是,显式锁的锁定和释放必须在一个try……finally块中,这是为了确保即使出现运行期异常也能正常释放锁,保证其他线程能够顺利执行。
1700450949
1700450950 内部锁的处理也非常简单,代码如下:
1700450951
1700450952 //内部锁任务
1700450953
1700450954 class TaskWithSync extends Task implements Runnable{
1700450955
1700450956 @Override
1700450957
1700450958 public void run(){
1700450959
1700450960 //内部锁
1700450961
1700450962 synchronized(“A”){
1700450963
1700450964 doSomething();
1700450965
1700450966 }
1700450967
1700450968 }
1700450969
1700450970 }
1700450971
1700450972 这两个任务看着非常相似,应该能够产生相似的结果吧?我们建立一个模拟场景,保证同时有三个线程在运行,代码如下:
1700450973
1700450974 public static void runTasks(Class<?extends Runnable>clz)throws Exception{
1700450975
1700450976 ExecutorService es=Executors.newCachedThreadPool();
[ 上一页 ]  [ :1.700450927e+09 ]  [ 下一页 ]