(1)synchronized 同步,拥有共同数据区,且只有一个共同数据区
(2)lock 在concurrent包里面
两者区别:
synchronized | lock |
---|---|
java的关键字,在jvm层面 | 类 |
线程执行发生异常,jvm会让线程释放锁 | 在finally中必须释放锁,不然容易造成线程死锁 |
– | – |
假设A线程获得锁,B线程等待。如果A线程阻塞,B线程 会一直等待 | 可以尝试获得锁线程可以不用一直等待 |
可重入 不可中断 非公平 | 可重入 可判断 可公平 |
– | – |
少量同步 | 大量同步 |
注意:两边没有公用对象,锁不住;持有同一个对象,一个整体下来
加粗样式reentrantLock 可重入锁
先上读锁,别人可以读不能写
先上写锁,别人不能读不能写