[171010-01]线程基础(对象锁class锁同步异步)

Posted 流易

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[171010-01]线程基础(对象锁class锁同步异步)相关的知识,希望对你有一定的参考价值。

synchronized、volatile、ReentrantLock、concurrent

线程安全:当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的

synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为“互拆区”或“临界区”

锁竟争:要尽量避免(会消耗CPU资源)

class锁和对象锁:多线程多对象则会产生多个锁(一个对象一个锁),采用static synchronized修饰可避免多个锁(class锁无论N个对象均产生一个锁)

同步和异步:

                    一个类两个方法(一个同步方法,一个异步方法);两个线程访问同时分别访问一个对象的同步方法和异步方法,执行异步方法无需等待同步方法执行完后;

                    一个类两个方法(两个均为同步方法);两个线程访问同时分别访问一个对象的两个同步方法,执行同步方法必须等待先执行的同步方法执行完后;

 

synchronized锁重入:同步方法调用同步方法、父类同步方法调用子类同步方法

synchronized代码块:注意synchronized代码块的锁,要避免用户字符串常量

volatile概念:

      修饰变量,主要作用是使变量在多个线程间可见(实现主内存和线程工作内存可见)

      性能比synchronized强很多,不会造成阻塞;

      volatile关键字非原子性(不具备同步性);只具有可见性没有原子性(要实现原子性建议使用atomic类系列对象);

       

 

以上是关于[171010-01]线程基础(对象锁class锁同步异步)的主要内容,如果未能解决你的问题,请参考以下文章

浅析多线程的对象锁和Class锁

java基础---多线程---synchronized实现原理

java 对象锁学习

java 多线程系列基础篇之 synchronized关键字

Java并发之从基础到框架

Java并发之从基础到框架