JAVA同步

***仅为自己学习笔记

sysnchronized(包括块和方法)

sysnchronied适合较少的任务,lock适合较大的并发量

sysnchronied执行线程时,其他线程只能在线程池中等待,等释放锁时,线程池中的线程抢锁。

wait()释放锁,释放CPU;notify(),notifyAll()唤醒

sleep()释放CPU,不释放锁。时间到后,最懂唤醒。

同步代码块中条件,即锁是唯一的,只有锁相同,才可以同步

lock即对每一个锁加上一个监听器,直接对监听器操作。需要在最后时释放锁

Lock lock = new ReentrantLock();  创建锁

Condition con1 = lock.newCondition(); 获取锁上的监听器;可以一个锁上加上多组监听器

Condition con1 = lock.newCondition();

lock.lock() 获取锁

lock.unlock() 释放锁

trylock()获取锁返回true

sysnchronied同步过程中,其他线程必须等待进行中的线程任务结束。

ReentrantLock则等待中的线程可被打断等待状态

原文地址:https://www.cnblogs.com/GlazedCat/p/6538414.html