`
yxpjx01
  • 浏览: 2979 次
社区版块
存档分类
最新评论

java-线程(lock)

    博客分类:
  • java
阅读更多
1、synchronized 同步方法及代码块,锁JVM会自动释放,lock,则需要手工管理
try{lock.lock()}finally{lock.unlock()}
2、lock 提供了读锁、写锁,以提高性能.为了保证数据的一致性和完整性,需要读和写是互斥的,写和写是互斥的,但是读和读是不需要互斥的,这样读和读不互斥性能更高些
ReentrantReadWriteLock

    private int data;// 共享数据 
    private ReadWriteLock rwl = new ReentrantReadWriteLock();    
    public void set(int data) { 
        rwl.writeLock().lock();// 取到写锁 
        try { 
            System.out.println(Thread.currentThread().getName() + "准备写入数据"); 
            try { 
                Thread.sleep(20); 
            } catch (InterruptedException e) { 
                e.printStackTrace(); 
            } 
            this.data = data; 
            System.out.println(Thread.currentThread().getName() + "写入" + this.data); 
        } finally { 
            rwl.writeLock().unlock();// 释放写锁 
        } 
    }    
    public void get() { 
        rwl.readLock().lock();// 取到读锁 
        try { 
            System.out.println(Thread.currentThread().getName() + "准备读取数据"); 
            try { 
                Thread.sleep(20); 
            } catch (InterruptedException e) { 
                e.printStackTrace(); 
            } 
            System.out.println(Thread.currentThread().getName() + "读取" + this.data); 
        } finally { 
            rwl.readLock().unlock();// 释放读锁 
        } 
    } 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics