2017-05-17 Java并发编程学习1

synchronized关键字可以修饰变量、方法和代码块块。synchronized是互斥锁,至多有一个线程可以拥有它。 当一个线程访问object的一个synchronized(this)代码块时,另一个线程仍然可以访问该object的其他非synchronized(this)代码块。 而当一个线程访问object的一个synchronized(this)代码块时,其他线程对该object的所有synchronized(this)代码块的访问均将被阻塞。因为这个线程获得了这个object的对象锁。 当synchronized修饰static方法时,第一个访问这个方法的线程获得的是这个类的Class锁

synchronized也可以保证可见性,在synchronized执行前该线程的工作内存会被刷新,synchronized执行之后该线程的工作内存会写入到主内存。

Written on May 17, 2017