
java并发
文韬_武略
这个作者很懒,什么都没留下…
展开
-
线程并发--CocurrentHashMap和CopyOnWriteArrayList详解
在多线程开发中,我们经常要考虑线程并发的问题,那么如何来避免线程并发代码的数据读写问题呢?我们常见的HashMap、TreeMap、LinkedList、ArrayList都是线程不安全的,而Java也提供了一些线程安全的容器类:如:各种并发容器:CocurrentHashMap、CopyOnWriteArrayLis等;各种线程安全队列(Queue/Deque):ArrayBlo...原创 2018-07-19 10:29:30 · 1772 阅读 · 0 评论 -
Java锁的种类以及辨析(二):自旋锁的其他种类
锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA下常见的锁名称以及特性,为大家答疑解惑。 2.自旋锁的其他种类上篇我们讲到了自旋锁,在自旋锁中 另有三种常见的锁形式:TicketLock ,CLH...转载 2017-02-09 17:17:35 · 333 阅读 · 0 评论 -
线程锁系列(1):CLH Lock
最近在看关于线程锁的算法,做一个整理。资料出自于《The Art of Multiprocessor Programming》,算是一个读书笔记吧。示范代码基于java。第一章是Craig, Landin, and Hagersten (CLH) locks。先上CLHLock的实现逻辑:Java代码 public class CLHLock implements Lock { ...转载 2017-02-10 17:14:11 · 642 阅读 · 0 评论 -
java锁的种类以及辨析(一):自旋锁
java锁的种类以及辨析(一):自旋锁作者:山鸡锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA下常见的锁名称以及特性,为大家答疑解惑。1、自旋锁自旋锁是采用让当前线程不停地的在循环体内执行实...转载 2017-02-09 17:13:48 · 377 阅读 · 0 评论 -
Java锁的种类以及辨析
Java锁的种类以及辨析作者:山鸡锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA中常见的锁以及其特性,为大家答疑解惑。 1、自旋锁2、自旋锁的其他种类3、阻塞锁4、可重入锁...转载 2017-02-09 17:12:15 · 384 阅读 · 0 评论 -
JAVA并发编程学习笔记之CLH队列锁
NUMA与SMPSMP(Symmetric Multi-Processor),即对称多处理器结构,指服务器中多个CPU对称工作,每个CPU访问内存地址所需时间相同。其主要特征是共享,包含对CPU,内存,I/O等进行共享。SMP的优点是能够保证内存一致性,缺点是这些共享的资源很可能成为性能瓶颈,随着CPU数量的增加,每个CPU都要访问相同的内存资源,可能导致内存访问冲突,可能会导致CPU资源的浪...转载 2017-02-10 17:16:54 · 293 阅读 · 0 评论 -
java的锁机制
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在java里边就是拿到某个同步对象的锁(一个对象只有一把锁); 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等待队列中)。 取到锁后,他就开始执行同步代码(被synchronized修饰的代码);线程执行完同步代码后马上就把锁还给同步对象,其他在锁池中等待的某个线程就可以拿到锁...转载 2017-02-13 13:53:18 · 1429 阅读 · 0 评论 -
【Java线程】锁机制:synchronized、Lock、Condition
转载自:http://blog.youkuaiyun.com/vking_wang/article/details/9952063http://www.infoq.com/cn/articles/java-memory-model-5 深入理解Java内存模型(五)——锁 http://www.ibm.com/developerworks/cn/java/j-jtp10264/ Java 理论与实...转载 2017-02-13 15:03:53 · 264 阅读 · 0 评论 -
Java多线程学习之sleep、wait、notify/notifyAll 详解
1、wait()、notify/notifyAll() 方法是Object的本地final方法,无法被重写。2、wait()使当前线程阻塞,前提是 必须先获得锁,一般配合synchronized 关键字使用,即,一般在synchronized 同步代码块里使用 wait()、notify/notifyAll() 方法。3、 由于 wait()、notify/notifyAll() 在syn...转载 2018-07-09 14:32:53 · 636 阅读 · 2 评论 -
volatile的适用场景
转载自:http://www.ibm.com/developerworks/cn/java/j-jtp06197.html,关于volatile写的很好的文章。把代码块声明为 synchronized,有两个重要后果,通常是指该代码具有 原子性(atomicity)和 可见性(visibility)。原子性意味着个时刻,只有一个线程能够执行一段代码,这段代码通过一个monitor obje...转载 2018-07-10 15:12:34 · 894 阅读 · 0 评论 -
ExecutorService详解
前言 在我们的日常开发中,难免会使用到线程,部分还会用到多线程并发问题。我们知道,线程的创建和释放,需要占用不小的内存和资源。如果每次需要使用线程时,都new 一个Thread的话,难免会造成资源的浪费,而且可以无限制创建,之间相互竞争,会导致过多占用系统资源导致系统瘫痪。不利于扩展,比如如定时执行、定期执行、线程中断,所以很有必要了解下ExecutorService的使用。...原创 2018-08-09 11:10:50 · 86753 阅读 · 4 评论 -
死锁
解决死锁的常用方法:1.避免一个线程同时获取多个锁2.避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源3.尝试使用定时锁,使用lokc.tryLock(timeout)来替代使用内部锁机制4.对于数据库,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况5.使用jstack和ThreadMXBean查找死锁原因,然后解决。 参考自:《Java并发...原创 2018-08-25 14:59:52 · 250 阅读 · 0 评论