
java并发
hao_yunfeng
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap 高并发性的实现机制
http://www.ibm.com/developerworks/cn/java/java-lo-concurrenthashmap/index.htmlConcurrentHashMap 是 Java concurrent 包的重要成员。本文将结合 Java 内存模型,来分析 ConcurrentHashMap 的 JDK 源代码。通过本文,读者将了解到 Concurr转载 2016-05-16 11:34:53 · 432 阅读 · 0 评论 -
线程间通信剖析
CountDownLatchCountDownLatch适用场景Java多线程编程中经常会碰到这样一种场景——某个线程需要等待一个或多个线程操作结束(或达到某种状态)才开始执行。比如开发一个并发测试工具时,主线程需要等到所有测试线程均执行完成再开始统计总共耗费的时间,此时可以通过CountDownLatch轻松实现。CountDownLatch实例 1 ...转载 2018-09-09 01:39:12 · 117 阅读 · 0 评论 -
多线程开发关键技术
sleep和wait到底什么区别其实这个问题应该这么问——sleep和wait有什么相同点。因为这两个方法除了都能让当前线程暂停执行完,几乎没有其它相同点。wait方法是Object类的方法,这意味着所有的Java类都可以调用该方法。sleep方法是Thread类的静态方法。wait是在当前线程持有wait对象锁的情况下,暂时放弃锁,并让出CPU资源,并积极等待其它线程调用同一对象的n...转载 2018-09-09 01:38:43 · 281 阅读 · 0 评论 -
当我们说线程安全时,到底在说什么
多线程编程中的三个核心概念原子性这一点,跟数据库事务的原子性概念差不多,即一个操作(有可能包含有多个子操作)要么全部执行(生效),要么全部都不执行(都不生效)。关于原子性,一个非常经典的例子就是银行转账问题:比如A和B同时向C转账10万元。如果转账操作不具有原子性,A在向C转账时,读取了C的余额为20万,然后加上转账的10万,计算出此时应该有30万,但还未来及将30万写回C的账户,此时...转载 2018-09-09 01:37:57 · 186 阅读 · 0 评论 -
从ConcurrentHashMap的演进看Java多线程核心技术
http://www.jasongj.com/java/concurrenthashmap/本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为。同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1.8中ConcurrentHashMap的实现原理。原创文章,转载请务必将下面这段话置于文章开头处(...转载 2018-09-09 01:36:04 · 131 阅读 · 0 评论 -
正确理解Thread Local的原理与适用场景
http://www.jasongj.com/java/threadlocal/ThreadLocal解决什么问题由于 ThreadLocal 支持范型,如 ThreadLocal< StringBuilder >,为表述方便,后文用 变量 代表 ThreadLocal 本身,而用 实例 代表具体类型(如 StringBuidler )的实例。不恰当的理解写这篇文章的一...转载 2018-09-09 01:33:16 · 158 阅读 · 0 评论 -
java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
https://blog.youkuaiyun.com/zqz_zqz/article/details/70233767之前做过一个测试,详情见这篇文章《多线程 +1操作的几种实现方式,及效率对比》,当时对这个测试结果很疑惑,反复执行过多次,发现结果是一样的: 1. 单线程下synchronized效率最高(当时感觉它的效率应该是最差才对); 2. AtomicInteger效率最不稳定,不同并发情况...原创 2018-09-09 01:11:59 · 200 阅读 · 0 评论 -
ConcurrentHashMap1.7和1.8的底层不同实现
https://my.oschina.net/zupengliu/blog/19300251.Hashmap和HashTable在线程安全方面的优劣?Hashmap多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。HashTable使用synchronized来保证线程安全,但在线程竞争...转载 2018-09-09 00:45:18 · 10602 阅读 · 5 评论 -
深入理解 Java 线程池:ThreadPoolExecutor
https://juejin.im/entry/58fada5d570c350058d3aaad线程池介绍在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理。如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题:如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁线程,如此一来会大大降低系统的效率。可能出现服务器在为...转载 2018-09-09 00:13:06 · 134 阅读 · 0 评论 -
SimpleDateFormat时间格式化存在线程安全问题
想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题。下面我们通过一...转载 2018-09-08 23:56:53 · 163 阅读 · 0 评论 -
Java并发编程:线程池的使用
https://www.cnblogs.com/dolphin0520/p/3932921.html 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复...转载 2018-09-08 18:32:46 · 93 阅读 · 0 评论 -
volatile关键字详解
volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatile关键字的场景。 内存模型 程序在执行过程中,每条指令都是通过CPU来执行的,存在数据的读...转载 2018-09-04 23:06:02 · 220 阅读 · 0 评论 -
40个Java多线程问题总结
前言这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会去看网上的答案,因此可能有些问题讲的不对,能指正的希望大家不吝指教。 40个问题汇总1、多线程有什么用?...转载 2018-09-04 23:01:22 · 86 阅读 · 0 评论 -
高并发之synchronized
synchronized原理在java中,每一个对象有且仅有一个同步锁。这也意味着,同步锁是依赖于对象而存在。当我们调用某对象的synchronized方法时,就获取了该对象的同步锁。例如,synchronized(obj)就获取了“obj这个对象”的同步锁。不同线程对同步锁的访问是互斥的。也就是说,某时间点,对象的同步锁只能被一个线程获取到!通过同步锁,我们就能在多线程中,实现对“对象/...转载 2018-09-04 23:00:49 · 505 阅读 · 0 评论 -
Java中的多线程概述
引如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。很多人都对其中的一些...转载 2018-08-28 00:53:59 · 124 阅读 · 0 评论 -
Java I/O模型从BIO到NIO和Reactor模式
Java I/O模型同步 vs. 异步同步I/O 每个请求必须逐个地被处理,一个请求的处理会导致整个流程的暂时等待,这些事件无法并发地执行。用户线程发起I/O请求后需要等待或者轮询内核I/O操作完成后才能继续执行。异步I/O 多个请求可以并发地执行,一个请求或者任务的执行不会导致整个流程的暂时等待。用户线程发起I/O请求后仍然继续执行,当内核I/O操作完成后会通知用户线程,或者调用用户...转载 2018-09-09 01:39:45 · 153 阅读 · 0 评论