您现在的位置: 爱51代码网 >> 范文 >> 文章正文
synchronized和java.util.concurrent.locks.Lock的异同

synchronized和java.util.concurrent.locks.Lock的异同
synchronized和java.util.concurrent.locks.Lock的异同 ?
主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。Lock还有更强大的功能,例如,它的tryLock方法可以非阻塞方式去拿锁。
举例说明(对下面的题用lock进行了改写):


[java] view plaincopyprint?
01.package com.huawei.interview; 
02.import java.util.concurrent.locks.Lock; 
03.import java.util.concurrent.locks.ReentrantLock; 
04. 
05.public class ThreadTest { 
06.    private int j; 
07.    private Lock lock = new ReentrantLock(); 
08.    public static void main(String[] args) { 
09.        // TODO Auto-generated method stub  
10.        ThreadTest tt = new ThreadTest(); 
11.        for(int i=0;i<2;i++) 
12.        { 
13.            new Thread(tt.new Adder()).start(); 
14.            new Thread(tt.new Subtractor()).start(); 
15.        } 
16.    } 
17.    private class Subtractor implements Runnable 
18.    { 
19. 
20.        @Override 
21.        public void run() { 
22.            // TODO Auto-generated method stub  
23.            while(true) 
24.            { 
25.                /*synchronized (ThreadTest.this) {          
26.                    System.out.println("j--=" + j--);
27.                    //这里抛异常了,锁能释放吗?
28.                }*/ 
29.                lock.lock(); 
30.                try 
31.                { 
32.                    System.out.println("j--=" + j--); 
33.                }finally 
34.                { 
35.                    lock.unlock(); 
36.                } 
37.            } 
38.        }    
39.    } 
40.    private class Adder implements Runnable 
41.    { 
42.        @Override 
43.        public void run() { 
44.            // TODO Auto-generated method stub  
45.            while(true) 
46.            { 
47.                /*synchronized (ThreadTest.this) {
48.                System.out.println("j++=" + j++);   
49.                }*/ 
50.                lock.lock(); 
51.                try 
52.                { 
53.                    System.out.println("j++=" + j++); 
54.                }finally 
55.                { 
56.                    lock.unlock(); 
57.                }                
58.            }            
59.        }    
60.    } 
61.} 

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    sharepoint 2010 获取用户信息Us
    设计包含max函数的队列
    随机从数组中取出指定的不重复的
    mysql主从同步延迟方案解决的学习
    青岛科学六年级下册教材分析
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    mysql主从同步延迟方案解决的学习
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    恢复使用繁体字可行性研究报告
    保险受益人制度相关问题的探讨
    初中生地理读图能力培养的研究
    搞笑生日祝福
    Java中的异常处理机制的简单
    final, finally, finalize的
    java try {}里有一个return语
    java里面String s="a"+"b"+"
    数组有没有length()这个方法
    php数据库操作类代码(增,删,
    could not initialize proxy
    Spring Bean 生命周期 三种表
    Netty4 SEDA 事件驱动原理分
    单片机交通灯问题
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |