05 2018 档案
摘要:AQS全称为AbstractQueuedSynchronizer,是并发容器中的同步器,AQS是J.U.C的核心,它是抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类都依赖它,如ReentrantLock、Semaphore、CyclicBarrier、Reentra
阅读全文
摘要:什么是线程不安全的类呢? 如果一个类的对象同时被多个线程访问,如果不做特殊的同步或并发处理,很容易表现出线程不安全的现象,比如抛出异常、逻辑处理错误等,这种类我们就称为线程不安全的类 常见线程不安全的类有哪些呢 下图中,我们只画出了最常见的几种情况,我们常见的Collections集合都是线程不安全
阅读全文
摘要:通常我们保证线程安全策略的方式有以下几种: a、不可变对象 b、线程封闭 c、同步容器 d、并发容器 不可变对象 可参考string类,可以采用的方式是将类声明为final,将所有成员都声明为私有的,对变量不提供set方法,将所有可变成员声明为final,通过构造器初始化所有成员,进行深度拷贝,在g
阅读全文
摘要:什么是发布对象? 发布对象是指使一个对象能够被当前范围之外的代码所使用 什么是对象逸出? 对象逸出是一种错误的发布,指当一个对象还没有构造完成时,就使它被其他线程所见 逸出-demo 在此实例中Escape对象还没有构造完成,就访问了该对象的成员变量thisCanBeEscape,该类是线程不安全的
阅读全文
摘要:什么是线程安全的类? 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要额外同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的 线程安全性包含哪些特性? 原子性:提供了互斥访问,同一时刻只能有一个线程对它进行操作 可见性:一个线程
阅读全文
摘要:在atomic包中,大多数类都是借助unsafe类来实现的,如以下代码 incrementAndGet()方法的实现如下: 我们再继续深入getAndInt()方法,实现如下: 在以上代码中我们着重要说的是 compareAndSwapInt(var1, var2, var5, var5 + var
阅读全文
摘要:本篇博客我们主要讲述J.U.C包下的atomic包,在上篇博客“并发模拟”的最后,我们模拟高并发的情形时出现了线程安全问题,怎么解决呢?其实解决的办法有很多中,如直接在add()方法上加synchronized关键字,还有一种就是用atomic包下的类来解决这个问题,这也是现在比较推荐的一种写法,下
阅读全文
摘要:我们要如何模拟一个高并发的环境来检查我们的代码呢?一般常用的方式有三种:利用测试工具ab,利用jmeter,代码模拟。本篇博客着重要说的是代码模拟的实现方式。 在开始写代码之前我们首先了解一下J.U.C中特别重要的两个工具类:CountDownLatch、Semaphore CountDownLat
阅读全文

浙公网安备 33010602011771号