
并发
zhangphh
欲戴王冠,必承其重
展开
-
HashMap、HashTable与ConcurrentHashMap
概述 为了解决HashMap 的线程不安全,有三种解决方法 使用Collections.synchronizedMap(map) 使用HashTable 使用ConcurrentHashMap 考虑到并发度等问题用的最多的是最后一种,它的性能和效率明显高于前面两种。 1、Collections.synchronizedMap 再synchronizedMap内部维护了一个普通话对象map和排斥锁mutex private final Map<K,V> m; // Backing Ma原创 2020-08-04 14:30:49 · 232 阅读 · 0 评论 -
Java多线程基础知识
一、线程与进程 进程 进程就是程序的一次执行过程,是系统运行程序的基本单位,系统运行一个程序就对应着一个线程从创建、运行再到消亡的过程,如Windows的任务管理器就是查看目前运行的进程。 线程 线程与进程相似,但线程是比进程更小的执行单位,一个进程可以包含很多线程。同类的多个线程之间共享同一块内存空间和同一组系统资源。由此看来,系统在切换多个线程或创建一个线程的开销要比切换进程或创建线程小得多,...原创 2019-09-09 19:58:26 · 140 阅读 · 0 评论 -
Java多线程之synchronized关键字
线程同步 为什么要使用线程同步呢?当有多个线程同时操作一个可共享的资源时,如果线程A修改完数据之后,还没来得及把新结果返回,此时线程B又来操作此数据,则此时线程B就获取到了错误的数据,得到的结果就可能出现严重错误。因此我们引入线程同步,当线程A在操作数据时,不允许其他线程操作此数据,待A线程工作完成之后在允许其他线程工作,这样就不会出现数据的混乱的现象了。 一、synchronized关键字的作用...原创 2019-09-10 12:06:42 · 246 阅读 · 0 评论 -
Java线程同步之volatile关键字
综述 之前的synchronized关键字虽然可以实现同步,但却是重量级锁,相对于synchronized来说,volatile更为轻量级,volatile的使用不会引起线程的调度和切换,但是volatile的同步性较差,而且其使用也更容易出错。 并发编程的基本概念 1、原子性 原子性即是指一个或多个操作要么会全部执行且不会被任何因素打断,要么全部不执行。 Java中的原子性包括: ①、基本类型的...原创 2019-09-10 19:02:51 · 331 阅读 · 0 评论 -
Java并发之AQS结构及原理分析
Java中的CAS CAS:全称为Compare And Swap,比较并交换,CAS 是现代操作系统,解决并发问题的一个重要手段。一个CAS涉及到了下面的操作: 假设内存中的原数据V,旧的预期值A,需要修改的新值B 1、比较 A 与 V 是否相等(比较) 2、如果比较相等,将 B 写入 V(交换) 3、返回操作是否成功 当多个线程对资源进行CAS操作时,只有一个线程能够成功,但是不会阻塞其他线程...原创 2019-09-15 16:25:35 · 313 阅读 · 0 评论 -
Java并发编程之同步工具类
三种同步工具类 Java为我们提供了三种同步工具类,以便更好的控制线程间的通信,如下: ①、闭锁 ②、信号量 ③、栅栏 一、闭锁 闭锁可以延迟线程的进度直到其达到终止状态。可以用来确保某些活动在其他活动都完成之后再新执行,例如: ①、确保计算机所需要的资源都被初始化之后在继续执行。 ②、确保某个服务再起所依赖的服务都完成之后再执行。 ③、等待某个操作的所有参与者都参与进来之后在执行下一步的操作(王...原创 2019-09-18 17:11:47 · 210 阅读 · 0 评论 -
Java并发之ThreadLocal简析
综述 从ThreadLocal的源码开始的注释上可以了解到如下内容: These variables differ fromtheir normal counterparts in that each thread that accesses one (via its{@code get} or {@code set} method) has its own, independently init...原创 2019-09-24 23:07:35 · 137 阅读 · 0 评论