并发编程
文章平均质量分 71
无。
区块链之美
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap 原理解析(JDK1.8)
https://www.jianshu.com/p/d10256f0ebea转载 2020-05-22 22:51:06 · 1841 阅读 · 0 评论 -
Collections.synchronizedCollection创建线程安全的集合
用Collections.synchronizedCollection创建线程安全的集合 Collection c=Collections.synchronizedCollection(new ArrayList()); List list=Collections.synchronizedList(new ArrayList()); Set s=Collections.synchronizedSet(new HashSet()); Map m=Collections.synchronizedMap(原创 2020-05-22 22:43:12 · 1869 阅读 · 0 评论 -
关于synchronized使用、实现原理
引言在 Java 中,关键字 synchronized可以保证在同一个时刻,只有一个线程可以执行某个方法或者某个代码块(主要是对方法或者代码块中存在共享数据的操作)【互斥】。synchronized可以保证同一时刻,只有一个线程能获取对象监视器,去执行一个方法或者某个代码块,所以它具有互斥性和可见性。synchronized的三种应用方式synchronized关键字最主要有以下3种应用方式:修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁修饰静态方法,作用于当前类对象原创 2020-05-26 22:09:06 · 256 阅读 · 0 评论 -
Java中的Copy-On-Write容器:读写分离
http://ifeve.com/java-copy-on-write/#more-10403https://baijiahao.baidu.com/s?id=1648624077736116382&wfr=spider&for=pchttps://blog.csdn.net/qq_40551367/article/details/89414446https://baijiahao.baidu.com/s?id=1652543241208099679&wfr=spider&am原创 2020-05-21 22:10:55 · 381 阅读 · 0 评论 -
Java中的锁(5):乐观锁的时间机制---CAS实现原理
乐观锁思想实现原理是一种无锁原理。CAS指令是实现无锁原理的方案之一。1、CAS是什么?CAS的全称是Compare And Swap,即比较交换。 其核心思想: CAS(V,E,N); V表示要更新的变量的内存位置,E表示更新变量的预期原值,N表示更新变量的更新值。在当前线程中,如果要更新变量预期原值E等于当前内存位置中的值,就把更新该内存位置的值,更新后的值为N。如果不相等...转载 2018-08-10 14:37:04 · 774 阅读 · 0 评论 -
关于阻塞队列LinkedBlockingQueue与ArrayBlockingQueue,看一篇就够了
博文地址:深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue转载 2018-08-14 15:41:44 · 375 阅读 · 0 评论 -
关于ConcurrentHashMap,看这一篇就够了
博文出处:ConcurrentHashMap总结转载 2018-08-14 16:13:01 · 425 阅读 · 0 评论 -
Java中的锁(1):同步、异步、互斥、死锁
主线:互斥锁 ---> 死锁 ---> 乐观锁与悲观锁 ---> 数据库中的锁(并发插入如何避免重复插入)一、线程同步、异步、互斥1、线程同步: 是指多个线程通过特定的设置(如互斥量、事件对象、临界区)来控制线程之间的执行顺序。这里的同步不是同时进行。 也就是说,线程之间通过同步建立起执行顺序的关系,如果没有同步,那线程之间是各自运行各自的! ...原创 2018-08-14 16:20:13 · 4933 阅读 · 0 评论 -
关于AbstractQueuedSynchronizer,看这一篇就够了
博文出处:一行一行源码分析清楚 AbstractQueuedSynchronizer (一)一行一行源码分析清楚 AbstractQueuedSynchronizer (二)http://ifeve.com/introduce-abstractqueuedsynchronizer/转载 2018-08-15 17:15:38 · 470 阅读 · 0 评论 -
关于synchronized,看这一篇就够了
摘要: 在 Java 中,关键字 synchronized可以保证在同一个时刻,只有一个线程可以执行某个方法或者某个代码块(主要是对方法或者代码块中存在共享数据的操作)【互斥】;同时我们还应该注意到synchronized另外一个重要的作用,synchronized可保证一个线程的变化(主要是共享数据的变化)被其他线程所看到(保证【可见性】,完全可以替代Volatile功能),这点确...转载 2018-08-13 11:33:42 · 450 阅读 · 0 评论 -
Java中的锁(3):悲观锁与乐观锁
主线:数据库的读现象(脏读、不可重复读、幻读)--->并发控制--->数据库的锁机制(悲观锁与乐观锁)--->事物隔离提示:以下内容均来自网络学习总结。1、并发控制 在并发访问情况下,可能会出现脏读、不可重复读和幻读等读现象。为了应对这样的问题,目前主流数据库都提供了锁机制,和事务隔离级别的概念。(1)并发控制是什么? 并发控制是确保及时纠正由...原创 2018-08-08 17:19:11 · 607 阅读 · 0 评论 -
Java中的锁(4):乐观锁的实现机制---CAS操作
前面分析了Java中的悲观锁与乐观锁,以及其实现方案。深入分析一下乐观锁的实现机制:CAS操作方式,本文将介绍什么是CAS、CAS的应用以及CAS存在的问题等。以下内容转自:http://www.hollischuang.com/archives/1537线程安全众所周知,Java是多线程的。但是,Java对多线程的支持其实是一把双刃剑。一旦涉及到多个线程操作共享资源的情况时,处理不好...转载 2018-08-09 19:16:33 · 735 阅读 · 0 评论 -
守护线程与非守护线程
Java分为两种线程:用户线程和守护线程所谓守护线程是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因 此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。守护线程和用户线程的没啥本质的区别:唯一的不同之处就在于虚拟机的离开:如果用户线...转载 2018-06-29 14:33:23 · 288 阅读 · 0 评论 -
Java并发:创建线程的两种方法:继承Thread类和实现Runnable接口(一)
【1】了解进程与线程的概念进程是一个程序在其自身的地址空间中执行一次活动,是资源申请、调度和独立运行的单位。线程是进程中的一个单一的连续控制流程,一个进程可以包含一个或多个线程。如果要在一个程序中实现多段代码同时交替运行,就需要产生多个线程,并指定每个线程上要运行的程序代码段,这就是多线程。当程序运行时,就自动产生了一个线程,主函数main就是在这个线程上运行的,当不再产生新的线程时,...原创 2017-04-09 21:18:58 · 17568 阅读 · 6 评论 -
Java并发:CompareAndSwap(CAS)
【1】CAS: CAS:CompareAndSwap, 翻译成比较并交换。 java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁,使用这些类在多核CPU的机器上会有比较好的性能.【2】compareAndSet()方法: private static final Unsafe unsafe = Unsafe.getUn...原创 2017-09-15 18:28:36 · 559 阅读 · 0 评论 -
Java并发:CAS、ABA问题、ABA问题解决方案
【1】锁1、加锁的机制 参见:java线程安全和锁机制详解 网址:http://smallbug-vip.iteye.com/blog/22757432、锁的机制有如下问题 (1)在多线程环境下,加锁、释放锁会导致比较多的上下文切换和调度延时,从而引起性能问题。 (2)一个线程持有锁会导致其他所有需要此锁的线程挂起。 (3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致...原创 2017-09-16 15:43:58 · 27421 阅读 · 9 评论 -
Java并发:生产者与消费者经典问题(马士兵)
package houy.qing.demo;public class ProducerSummer { public static void main(String[] args) { SyncStack ss = new SyncStack(); new Thread(new Producer(ss)).start(); new T...原创 2017-11-22 23:28:09 · 1760 阅读 · 0 评论 -
Java并发:线程共享变量可见性原理
0、线程安全性:线程安全性包括两个方面,①可见性。②原子性。0.1、线程之间的通信:线程的通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种共享内存和消息传递。(1)在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信,典型的共享内存通信方式就是通过共享对象进行通信。(2)在消息传递的并发模型里,线程之间没有公共状态,线程...原创 2018-04-02 16:53:26 · 1551 阅读 · 2 评论 -
Java并发:对象的notify方法的含义和对象锁释放的三种情况
1、notify()方法的含义:(1)notify()方法是随机唤醒一个线程,将等待队列中的一个等待线程从等待队列中移到同步队列中。(2)在执行完notify()方法后,当前线程不会马上释放该对象锁,呈wait状态的线程也不能马上获得该对象锁,要等到执行notify方法的线程将程序执行完 ,也就是退出sychronized代码块后,当前线程才会释放锁,而在同步队列中的该线程才可以获取该对象锁。2、...转载 2017-10-21 14:12:35 · 1363 阅读 · 0 评论 -
Java并发:ReadWriteLock 数据先从缓存中去获取,如果缓存没有,则到数据库中获取
package thread.writeAndread;import java.util.HashMap;import java.util.Map;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;/** *This is ...原创 2017-11-03 10:49:13 · 1516 阅读 · 0 评论 -
Java并发:线程池技术
1、线程池的作用在《Java并发编程的艺术》中讲到,合理的使用线程池鞥能带来三个好处:第一:降低资源消耗。第二:提高响应速度。第三:提高线程的可靠性管理。2、线程池的实现原理 图1 线程池的处理流程 图2 ThreadPoolExecutor执行示意图图1和图2...原创 2018-04-10 21:38:39 · 264 阅读 · 2 评论 -
JAVA三种实现单例模式方法(一):懒汉式实现单例设计模式
package instance.lazy;import java.io.ObjectStreamException;import java.io.Serializable;/** * 懒汉式单例 * @author jingzi * 单例模式是最常用的设计模式,一个完美的单例需要做到哪些事呢? * 1、单例 * 2、延迟加载 * 3、线程安全 * 4、没有性能问题 *...原创 2018-04-17 18:40:26 · 1224 阅读 · 2 评论 -
JAVA三种实现单例模式方法(三):枚举式实现单例设计模式
package instance.enumStyle;public class InstanceEnumStyle { private InstanceEnumStyle() {} public static InstanceEnumStyle getInstance() { return Singleton.INSTANCE.getSingle(); } privat...原创 2018-04-17 19:35:58 · 819 阅读 · 0 评论 -
JAVA三种实现单例模式方法(〇)
0、线程安全参考:从JVM角度看线程安全与垃圾收集1、单例设计模式简介 单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。 从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。...原创 2018-04-17 19:54:56 · 1364 阅读 · 0 评论 -
JAVA三种实现单例模式方法(二):使用静态内部类实现单例设计模式
静态代码块和静态内部类的加载顺序:当调用外部类的构造函数是,外部类的静态代码块同时被加载,但是其内部类不会同时被加载;当且仅当内部类的静态域或其构造方法或其静态方法被调用时,内部内才被加载。因此,通过内部内实现单例,就能实现延迟加载。这个解决方案被称为Lazy initialization holder class 模式,这个模式综合使用了java的类级内部类和多线程缺省同步锁的知识, ...原创 2018-05-28 14:11:47 · 6548 阅读 · 1 评论 -
JAVA并发:多线程编程之同步代码块与同步函数(二)
【4】多线程的同步的两种方法线程同步:程序中不能有多个线程同时在一段代码之间执行。多线程的同步的两种方法:同步代码块、同步函数。【4-1】同步代码块为解决【3-1】中的问题,一种方法是保证以下代码的原子性。if (Numbe > 0){ System.out.println(Thread.currentThread().getName()...原创 2017-04-10 16:04:45 · 691 阅读 · 1 评论