java-线程(lock)

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();// 释放读锁 
        } 
    } 

猜你喜欢

转载自yxpjx01.iteye.com/blog/2220130