线程协作

· 并发

线程协作 线程之间相互协作,可以通过以下几种方式来进行实现: 信号量 - semaphore 栅栏 - CyclicBarrier 条件 - Condittion 屏障 - CountDownLatch 信号量 线程之间信号量(semaphore)的作用是于标记当前资源能否被线程访问的信号,线程访问资源时尝试用acquire,访问完成使用release归还资源 import java.util...

Read More →
#线程协作

Futrue初探

· 并发

Futrue初探 Runnable和Callable的区别? Runnable是一个无返回值,并且不能checked Exception的任务定义,java中之所以这样实现是因为执行Runnable方法是调用的Threa.run()方法,不是当前线程进行执行,所以就算抛出异常我们也无法捕捉到; Callable方法定义的是一个有返回值并且可抛出异常的方法,底层采用的是submit()方法,返回的是...

Read More →
#Futrue

ThreadLocal的分析

· 并发

ThreadLocal的分析 ThreadLocal的适用场景 ThreadLocal适用于保存每个线程都独享的对象 ThreadLocal适用于保存每个线程独享的对象可供其他方法获取的场景 例如web应用程序中的用户信息可以保存中用线程中,从而在其他需要用到的地方直接可以获取到 ThreadLocal是不是用来解决共享资源多线程访问的问题? 不是,ThreadLocal的底层机制决定了每个...

Read More →
#Thread

原子类的分析

· 并发

原子类的分析 原子类是什么? 原子类是操作要么是成功要么是失败,不能被中断的类。在java中是在java.util.concurrent.atomic下。与锁对比 粒度更细 效率更高 原子类有哪些? 分类 类名 Atomic* 基本类型原子类 AtomicInteger、AtomicLong、AtomicBoolean Atomic*Array 数组原子类 AtomicInt...

Read More →
#原子类

阻塞队列

· 并发

阻塞队列 阻塞队列的定义 阻塞队列是实现了BlockingQueue接口的子类,BlockingQueue接口是继承自Queue BlockingQueue public interface BlockingQueue<E> extends Queue<E> { // 阻塞队列的添加操作,如果队列已满,则抛出异常 boolean add(E e)...

Read More →
#阻塞队列

并发容器

· 并发

并发容器 JAVA中常见的并发的容器有HashMap、ConcurrentHashMap、CopyOnWriteArrayList HashMap HashMap在并发场景时候存在几个问题: get()方法在容器扩容时,获取到的值可能会不正确。因为在扩容时候,hashMap没有保证容器安全性,可能会出现get()方法获取到镜像链表上,而镜像链表此时并没有值的情况 put()方法可能会造成值消失(...

Read More →
#并发容器