Synchronized关键字简单解析
2017-06-28 本文已影响0人
一只松鼠plus
synchronized是以排队的方式进行处理多线程访问的,调用前先判断有没有上锁,如果上锁则会等待,在等待过程中会一直尝试获取这把锁,多个线程同时争这把锁。此外,只有共享资源读写访问才需要同步化,不是共享资源则没有同步的必要。
示例:
![](https://img.haomeiwen.com/i5997420/51373721b126a5bd.png)
![](https://img.haomeiwen.com/i5997420/f497c897910b0182.png)
![](https://img.haomeiwen.com/i5997420/526812123ef123dc.png)
![](https://img.haomeiwen.com/i5997420/4480a1c6d0230a6b.png)
![](https://img.haomeiwen.com/i5997420/388cb3903f0dda2a.png)
synchronized取得的锁都是对象锁,而不是把一段代码或者是一个方法当作锁,所以在上面的示例中(测试一所示),哪一个线程先执行带synchronized关键字的方法,那个线程就持有该方法所属对象的锁lock,那么其他线程只能呈等待状态,前提是多个线程访问的是同一个对象!如果多个线程访问多个对象,则Jvm会创建多个锁(测试二所示)