
Java并发编程
RamboKitty
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线程的取消与关闭
线程的取消与关闭 1. 处理不可中断的阻塞 在Java库中,许多可阻塞的方法都是通过提前返回或者抛出InterruptedException来相应中断请求的,然而并非所有的可阻塞方法或者阻塞机制都能相应中断。如果一个线程由于可执行同步的Socket IO或者等待获得内置锁而阻塞,那么中断请求只能设置线程的中断状态,除此之外没有其他任何作用。对于那些由于执行不可中断操作而被阻塞的线程,可以使...原创 2018-05-29 10:18:16 · 1367 阅读 · 0 评论 -
并发编程随笔
1.死锁 某资源加锁后没有释放或者没有正确释放该锁,另一线程无法获取该资源锁,引起死锁。 出现死锁可以dump线程信息,查看死锁原因,从而解决。 避免死锁的常见方法 避免一个线程同时获取多个锁 避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。 尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制 对于数据库锁,加锁和解锁必须在一个数据库...原创 2018-05-29 10:23:52 · 215 阅读 · 0 评论 -
自旋锁
几种自旋锁的实现原理 自定义接口 interface Lock { void lock(); void unLock(); } 1. SpinLock(自旋锁) static class SpinLock implements Lock { /** * currentHoldLockTh...原创 2018-05-29 10:23:18 · 893 阅读 · 0 评论 -
Java Lock
Java Lock 1. synchronized的实现原理与应用 synchronized是Java元老级锁,又被称为重量级锁,JDK1.6中为了减少获得锁和释放锁带来的性能消耗而引入偏向锁和轻量级锁 1.1 synchronized实现同步 synchronized实现同步的基础:java 中的每一个对象都可以作为锁,这些锁被称为内置锁或者监视锁。 对于普通同步方法,锁是当...原创 2018-05-29 10:22:52 · 526 阅读 · 0 评论 -
AQS原理
AbstractQueuedSynchronizer(AQS)实现原理 AQS中包含两种锁 独占锁,每次只能有一个线程能持有锁,ReentrantLock就是以独占方式实现的互斥锁 共享锁,则允许多个线程同时获取锁,并发访问 共享资源(只能读),但是只能有一个线程进行写操作,如:ReadWriteLock 锁队列的实现都是基于CLH的一种变体,在其队列节点的前驱上自旋 队列节点...原创 2018-05-29 10:22:20 · 275 阅读 · 0 评论 -
并发容器
ConcurrentHashMap JDK1.6采用Segment分段锁技术提高并发访问效率,首先将数据分成一段一段的存储,然后给每一个段数据配一个锁,这样就可以多线程访问不同段的数据而不受竞争影响。 JDK1.8采用CAS+Synchronized保证并发更新安全,采用数组+链表+红黑树存储结构,默认table[16],put等操作会采用CAS更新,找到table[i]后会将此索引处的链表进...原创 2018-05-29 10:21:00 · 240 阅读 · 1 评论 -
同步工具类
同步工具类 闭锁 闭锁可以延迟线程的进度直到达到其终止状态,闭锁的作用相当于一扇门:在闭锁到达结束状态之前,这扇门一直是关闭的,并且没有任何线程能通过,当达到结束状态时,这扇门会打开并允许所有的线程通过 闭锁的作用: 1. 确保某个计算在其需要的所有资源都被初始化之后才执行 2. 确保某个服务在其依赖的所有其他服务都已经启动之后才启动 3. 等待直到某个操作的所有参与者就绪后再继续...原创 2018-05-29 10:20:00 · 231 阅读 · 0 评论 -
Executor框架
Executor框架 1.简介 Java并发库提供一种灵活的线程池实现作为Executor框架的一部分,在Java类库中,任务执行的主要抽象不是Thread而是Executor public interface Executor { /** * Executes the given command at some time in the future. The ...原创 2018-05-29 10:19:24 · 210 阅读 · 0 评论 -
CompletionService
CompletionService CompletionService简介 CompletionService与ExecutorService类似都可以用来执行线程池的任务,ExecutorService继承了Executor接口,而CompletionService则是一个接口,那么为什么CompletionService不直接继承Executor接口呢?主要是Executor的特性决定...原创 2018-05-29 10:18:49 · 230 阅读 · 0 评论 -
线程封闭技术
简介 如果仅在单线程内访问数据,就不需要同步,这种技术被称为线程封闭,它是实现线程安全性最简单方式之一。 当某个对象封闭在一个线程中时,这种用法将自动实现线程安全性,即使被封闭的对象本身不是线程安全的。 Swing的可视化组件和数据模型对象都不是线程安全的,Swing通过将它们封闭到了Swing的事件分发线程中来实现线程安全性。 JDBC Connection对象并没规定其必须是线程安全的,...原创 2018-06-02 14:37:46 · 371 阅读 · 0 评论