为了提高效率,出现了多线程并发执行,并发执行处理共享变量就会带来安全性问题。那么,在java关键字synchronized就具有使每个线程依次排队操作共享变量的功能。很显然,这种同步机制效率很低,但synchronized是其他并发容器实现的基础,对它的理解也会大大提升对并发编程的感觉。
二、synchronized实现原理 2.1 monitor机制 2.1.1 Java对象头Java中每个对象都有他的对象头,并且synchronized用的锁是存在对象头中的。
- Klass Word 指明对象的类型
- Mark Word 存储hashCode或锁信息
- 对于数组对象,还需要32位存储数组长度(32位虚拟机);
- 所以在java中,int类型和Integer类型所占的大小是不同的,int占4个字节,Integer是对象,本身8个字节和存储的值4个字节,总共占12个字节;
- 线程去执行临界区代码;
- Thread-2先获得锁,成为monitor的主人,其他线程都要到blocked队列中等待;
- 不加synchronized关键字,对象不会关联monitor,也就不会有上述情况。也就是说,被加锁的对象,才会关联monitor,那么多个线程操作这个对象,就会有上述情况。
1、Java并发编程的艺术 方腾飞等著;
2、黑马JUC编程;



