《多线程并发》(一)

1.什么是线程安全

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

2.如果现实线程安全

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

  一个线程想要执行synchronized修饰的方法里面的代码时,首先是尝试获取锁,如果拿到锁,执行synchronized代码体,拿不到时一直尝试获得这把锁,直到拿到为止,而且是多线程同时去竞争这把锁,(也就是会有锁竞争的问题)。

 多个线程多个锁:

如果在static的方法synchronized修饰 标识是类锁 独占锁

3.对象锁的同步和异步

同步:synchronized

同步的概念就是共享,如果不是共享的资源,就没有必要进行同步的。

异步:asynchronized

异步的概念就独立,相互之间不受任何制约,类似于ajax 请求。

同步的目的是为了线程安全,其实对于线程安全来说,需要满足两个特性:

原子性(同步)

可见性

4.脏读

5.synchronized 锁重入(jdk 1.8 之后性能接近于lock)

关键字synchronize拥有锁重入的功能,

6.volatile 关键字

 用于修饰变量在多个线程之间可见性不具备synchronized 关键字的原子性,性能比synchronized 强很多,不会造成阻塞,在很多开源的架构里使用,比如netyy的底层代码大量使用volatile,一般volatile用于只针对多个线程可见的变量操作,并不能代替synchronized 的同步功能,要实现原子性推荐使用atomic类的系列的对象,支持原子性操作(注意atomci类只保证本身方法的原子性,并不保证多次操作的原子性)

 


猜你喜欢

转载自blog.csdn.net/sinat_24798023/article/details/80801125
今日推荐