多线程 同步笔记

来源:互联网 发布:优化好的单机游戏 编辑:程序博客网 时间:2024/06/07 09:46


                            对java同步控制方法的记录

  1.  使用synchronized

  2.  重入锁reentrantlock


        1.synchronized需要加在指定对象上,静态方法,或者指定对象的实例方法,关键把锁加在同一个对象上


2.reentrantlock中提供的几种锁,reentrantlock可以反复进入

lock unlock显示的加锁和释放锁

lockinterruptibly 可以对中断进行相应响应

tryLock方法:   

public boolean tryLock(long timeout, TimeUnit unit)            throws InterruptedException {        return sync.tryAcquireNanos(1, unit.toNanos(timeout));    }
申请锁的超时 返回false

tryLock()不带参数直接使用,当前线程获取锁,锁没被其他线程占用,获取成功返回true,否则但会false


公平锁:维护一个队列,来获取锁,reentrantlock可以设置公平锁,但是一般性能低下

public ReentrantLock(boolean fair) {        sync = fair ? new FairSync() : new NonfairSync();    }

Condition对象的await()和signal()和作用于Objct的wait()和notify()作用相似,wait()和notify和synchronized关键字合作,await()和signal()和condition合作


Semaphore信号量,无论内部锁synchronized还是重入锁reentrantlock都是一次允许一个线程访问一个资源

Semaphore允许一次多个线程访问一个资源


ReentrantReadWriteLock读写锁 读锁readLock() 写锁writeLock(),读写锁允许多个线程i同时读,读操作远大于写操作时,可以用来有效的提升性能


非阻塞阻塞阻塞阻塞



 






原创粉丝点击