自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 线程安全15_并发队列

并发无阻塞队列:ConcurrentLinkedQueue ConcurrentLinkedQueue无阻塞、无锁、高性能、无界、线程安全,性能优于BlockingQueue、不允许null值 并发阻塞队列:ArrayBlockingQueue 基于数组实现的阻塞有界队列、创建时可指定长度,内部实现维护了一个定长数组用于缓存数据,内部没有采用读写分离,写入和读取数据不能同时进行,不允许nul...

2018-09-13 00:31:13 200

原创 线程安全14_并发容器类

ConcurrentHashMap替代了HashMap,HashTable(无序) ConcurrentSkipListMap替代了TreeMap(有序) ConcurrentHashMap将Hash表分成了16个segment,每个segment单独进行锁控制,从而减少了锁的密度,提高了性能。...

2018-09-11 20:18:48 105

原创 线程安全13_Concurrent包内Atomic类的原子性

使用AtomicInteger等原子类可以保证共享变量的原子性。 使用Atomic类不能保证成员方法的原子性。 Atomic类采用了CAS非锁机制(Check And Set)

2018-09-11 17:56:37 150

原创 线程安全12_volatile与static的区别

volatile:保证一致性,不保证唯一性,多个实例有多个volatile变量。 static:保证唯一性,不保证一致性,多个实例共享一个静态变量。

2018-09-11 16:18:55 607

原创 线程安全11_volatile关键字(可见性和原子性)

强制线程到共享内存中读取数据,而不是从线程工作内存中读取,从而使变量在多个线程间可见。 volatile只能保证可见性,无法保证原子性,volatile属于轻量级的同步,性能比synchronized强很多(区别在于不加锁),但是只能保证线程间的可见性,并不能代替synchronized的同步功能。...

2018-09-11 14:44:03 188

原创 线程安全10_阻塞式线程安全队列

package com.bao.demo; import java.util.ArrayList; import java.util.List; /** * 使用synchronized、wait、notify实现带阻塞的线程安全队列 */ class MQueue { private List<String> list = new ArrayList<Stri...

2018-09-11 00:05:27 284

原创 线程安全9_线程之间通讯

每个线程都是独立运行的个体,线程通讯能让多个线程之间协同工作。 Object类中的wait/notify方法可以实现线程间通讯。 wait/notify必须与synchronized一同使用。 wait释放锁,notify不释放锁(只通知)。 notify只会通知一个wait中的线程,并把锁给他,不会产生锁竞争问题,但是该线程处理完毕后必须再次notify或者notifyAll,完成类似链...

2018-09-10 23:29:36 74

原创 线程安全8_并发与死锁

是指2个或者2个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的线程称为死锁。...

2018-09-10 22:34:11 81

原创 线程安全7_synchronized代码块(不要在线程内修改对象锁的引用)

可以达到更细粒度的控制 当前对象锁 类锁 任意对象锁 总结: 同类型锁之间互斥,不同类型的锁之间互不干扰。 不要在线程中修改对象锁的引用,引用被改变会导致锁失效。(内存地址会发生改变)。 在线程中修改了锁对象的属性,而不修改引用则不会引起锁失效,不会产生线程安全的问题。(可以set属性,不可以new)。...

2018-09-10 22:21:48 346

原创 线程安全6_抛出异常释放锁

一个线程再获得锁之后执行操作,发生错误抛出异常,则自动释放锁。 1,可以利用抛出异常,主动释放锁。 2,程序异常时防止资源被死锁,无法释放。 3,异常释放锁可能导致数据不一致。...

2018-09-09 23:35:03 365

原创 线程安全5_锁重入

同一个线程得到了一个对象的锁之后,再次请求此对象时可以再次获得该对象的锁。 同一个对象内的多个synchronized方法可以锁重入。 父子类可以锁重入。...

2018-09-09 22:39:46 72

原创 线程安全4_脏读

由于同步和异步方法的执行个性,如果不从全局上进行并发设计很可能会引起数据的不一致,也就是所谓的脏读。 多个线程访问同一个资源,在一个线程修改数据的过程中,另一个线程再来读取数据,就会引起脏读的产生。 为了避免脏读我们一定要保证数据修改操作的原子性,并且对读取数据操作也要进行同步控制。 (可以去了解一下oracle的snapshot too old Exception)...

2018-09-09 22:05:32 101

原创 线程安全3_对象锁的同步和异步

对象锁只针对synchronized修饰的方法生效,对象中的所有synchronized方法都会同步执行,而非synchronized方法异步执行。 避免误区:类中的两个synchronized方法,两个不同的线程分别调用两个方法,相互之间也需要竞争锁,因为两个方法从属于一个对象,而我们是在对象上加锁。...

2018-09-09 16:38:48 128

原创 线程安全2

Synchronized作用在非静态方法上代表的对象锁,一个对象一把锁,多个对象之间不会发生锁竞争。 Synchronized作用在静态方法上则升级为类锁,所有对象共享一把锁,存在锁竞争。...

2018-09-09 16:00:14 63

原创 线程安全1

1,线程安全的概念:当多个线程访问某一个类,对象或者方法时,这个类,对象或者方法都能表现出与单线程执行时一致的行为,那么这个类,对象或者方法就是线程安全的。 2,线程安全问题都是由全局变量及静态变量引起的。 3,若每个线程中对全局变量,静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的,若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。...

2018-09-09 00:36:15 70

原创 单例模式

三种单例模式 1 饿汉式 特点: 比较饥渴,在类加载的时候就已经将对象实例化,通过一个方法暴露给外部,从而获取该对象的实例 public class DanLi_01 { private DanLi_01 () {} private static final DanLi_01 danLi_01 = new DanLi_01(); public static D...

2018-09-01 23:23:02 81

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除