多线程--同步--方式/对比
原文网址:多线程—同步—方式/对比_IT利刃出鞘的博客-CSDN博客
Java线程同步的实现方式
其他网址
JAVA多线程——实现同步_Java_weixin_38719347的博客-CSDN博客
Java 线程同步几种方式 - - ITeye博客
Java中的锁分类与使用 - hustzzl - 博客园
简介
Juc(java.util.concurrent)里有以下内容:原子类、锁、线程池、并发集合(List,Map)等。
线程同步的实现方式(前四种比较常用)
方式 优点 缺点 使用场景 synchronized 使用简单;CPU占用低 响应缓慢(并发性能差);不灵活。 并发量低;大的代码块
同步方法/代码块
java.util.concurrent.locks.
(锁)并发性能高;灵活
CPU占用高(CAS通病);需手动加锁、释放锁 例如:可重入锁(ReentrantLock) java.util.concurrent.atomic.
(原子变量)并发性能高(比locks还高) 只能锁一个变量 可升级为原子变量队列 ThreadLocal wait(),notify()
(等待与唤醒)java.util.concurrent.BlockingQueue
(阻塞队列)
synchronized与volatile比较
其他网址
JMM系列—综述_feiying0canglang的博客-CSDN博客
比较方面 | synchronized | volatile |
作用 | 锁定当前对象,只有当前线程可以访问该对象,其他线程被阻塞。 | 本质是在告诉 jvm 当前变量在寄存器(工作内存)中的值是不确定的。 实际上,一个变量被声明为volatile时,线程在写入变量时不会把值缓存在寄存器或者其他地方,而是会把值刷新回主内存。当其他线程读取该共享变量时,会从主内存重新获取最新值,而不是使用当前线程的工作内存中的值。 |
使用范围 | 变量、方法、和类 | 变量 |
线程安全 | 可以保证变量的原子性、可见性、有序性 | 保证变量的可见性和顺序性,不能保证原子性 |
阻塞 | 可能会造成线程的阻塞 | 不会造成线程的阻塞 |
优化 | 标记的变量可以被编译器优化 | 标记的变量不会被编译器优化 |
synchronized与Lock比较
其他网址
synchronized 和Lock区别_Java_洞玄之境的博客-CSDN博客
synchronized和lock的区别(底层实现) - 简书
项 | synchronized | Lock |
存在层面 | java 内置关键字,在 jvm 层面 | java 类(实际是一个接口),在API层面 |
锁的释放 | 会自动释放锁: 线程执行完同步代码会释放锁 ; 线程执行中发生异常会释放锁;(获得锁的线程) | 需在 finally 中手工释放锁(unlock()方法释放锁) |
锁的获取 | 若线程 1 获得锁,线程 2 等待; 若线程 1 阻塞,线程 2 会一直等待 | 分情况而定,Lock有多个获得锁的方式。 可尝试获得锁,线程可以不用一直等待 |
锁状态 | 无法判断是否已经获取锁 | 可判断是否已经获取到锁 |
锁类型 | 可重入、不可中断、非公平 | 可重入、可中断、可公平(两者皆可) |
是否可被中断 | 只有获取到锁之后才能中断,等待锁时不可中断。 | 等待锁时可用interrupt来中断等待 |
适用场景 | 少量线程的同步。 | 大量线程的同步。 |
性能 | jdk1.6以前:重量级锁(无法取得锁即挂起)。 jdk1.6之后:优化了性能(锁自动升级)。 | 1. Lock 锁可以提高多个线程进行读的效率(使用 readWriteLock) 2. 竞争不激烈的情况下,synchronized的性能优于ReetrantLock;竞争激烈时,synchronized的性能会下降几十倍,但ReetrantLock的性能维持常态; 3. ReetrantLock 提供了多样化的同步,比如有时间限制的同步,可以被Interrupt的同步(synchronized的同步是不能Interrupt的)等。 |
synchronized与ReentrantLock比较
其他网址
Synchronized与ReentrantLock区别总结_Java_zxd8080666的博客-CSDN博客
相同点
- 它们都是加锁方式同步;
- 都是可重入锁;
- 阻塞式的同步;
不同点
因为ReentrantLock实现了Lock,所以拥有synchronized与Lock的所有不同点,其他不同点如下:
- ReentrantLock:多个线程在等待的时候,可以提供公平的锁(默认的是非公平锁,性能会比公平锁好一些)
- ReenTrantLock 可以绑定多个锁条件
还没有评论,来说两句吧...