Rico's Blogs

你得丢开以往的事,才能不断继续前进。

Map 综述(三):彻头彻尾理解 ConcurrentHashMap

ConcurrentHashMap是J.U.C的重要成员,它是HashMap的一个线程安全的版本。在默认理想状态下,ConcurrentHashMap可以支持16个线程执行并发写操作及任意数量线程的读操作。本文将结合Java内存模型和JDK源代码,剖析其高并发的具体实现机制,包括在JDK中的定义和...

2017-05-27 17:03:10

阅读数 34994

评论数 36

彻头彻尾理解单例模式与多线程

本文概述了单例模式产生动机,揭示了单例模式的本质和应用场景。然后我们给出了单例模式在单线程环境下的两种经典实现:饿汉式和懒汉式,但是饿汉式是线程安全的,而懒汉式是非线程安全的。在多线程环境下,我们特别介绍了五种方式来在多线程环境下创建线程安全的单例,使用synchronized方法、synchro...

2017-03-20 16:26:03

阅读数 11830

评论数 21

Java 并发:并发背景

并发与操作系统的生命历程息息相关。进程的出现,使得程序状态的保存变为现实,为进程间的切换提供了可能,实现了操作系统的并发,大大提高资源利用率。之后,人们对实时性又有了更高的要求。由于一个进程由若干个子任务组成,所以人们就发明了线程,让每个线程负责一个独立的子任务,提高了程序的响应灵敏度,但同时也带...

2016-12-03 22:24:51

阅读数 9035

评论数 15

深入剖析Java线程池与Executor框架(一) : 任务的抽象

摘要:   在《Java 并发:并发背景》一文中,从操作系统演进的角度解释了进程与线程出现的背景与原因。简单地说,进程实现了操作系统级别的并发,线程实现了进程级别的并发。通过使用多个线程来执行任务,不仅可以极大提高资源的利用率,而且可以满足很多场景下的实时性要求,实现任务并发、异步执行的效果。 ...

2018-04-07 23:04:41

阅读数 2094

评论数 3

面试/笔试第四弹 —— 多线程面试问题集锦

本文对面试/笔试过程中经常会被问到的一些关于并发编程的问题进行了梳理和总结,包括线程池、并发控制锁、并发容器和队列同步器等基础知识点,一方面方便自己温故知新,另一方面也希望为找工作的同学们提供一个复习参考。关于这块内容的初步了解和掌握,大家可以阅读《Java并发编程的艺术》、《《Java多线程编程...

2017-10-22 20:55:14

阅读数 9567

评论数 11

Java 并发:Lock 框架详解

我们知道,synchronized是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但 synchronized 粒度有些大,在处理实际问题时存在诸多局限性,比如响应中断等。Lock 提供了比 synchronized更广泛的锁操作,它能以更优雅的方式处理线程同步问题。本文以syn...

2017-02-10 16:52:05

阅读数 6550

评论数 15

Java 并发:线程间通信与协作

线程与线程之间不是相互独立的个体,它们彼此之间需要相互通信和协作,最典型的例子就是生产者-消费者问题。本文首先介绍 wait/notify 机制,并对实现该机制的两种方式——synchronized+wait-notify模式和Lock+Condition模式进行详细剖析,以作为线程间通信与协作的...

2017-02-08 17:43:18

阅读数 9445

评论数 24

Java 并发:深入理解 ThreadLocal

ThreadLocal 又名线程局部变量,是 Java 中一种较为特殊的线程绑定机制,用于保证变量在不同线程间的隔离性,以方便每个线程处理自己的状态。进一步地,本文以源码为切入点,深入分析了ThreadLocal类的作用原理,并给出应用场景和一般使用步骤。

2017-01-19 10:12:38

阅读数 3408

评论数 3

Java 并发:内置锁 Synchronized

在多线程编程中,线程安全问题是一个最为核心的问题,即当多个线程访问某共享、可变数据时,始终都不会导致数据破坏以及其他不该出现的结果。而所有的并发模式解决这个问题采用的方案都是序列化访问临界资源 。在 Java 中,synchronized内置锁实现了同步互斥访问。 synchronized 内置锁...

2017-01-12 19:48:21

阅读数 5289

评论数 13

Java 并发:Thread 类深度解析

摘要:   Java 中 Thread类 的各种操作与线程的生命周期密不可分,了解线程的生命周期有助于对Thread类中的各方法的理解。一般来说,线程从最初的创建到最终的消亡,要经历创建、就绪、运行、阻塞 和 消亡 五个状态。在线程的生命周期中,上下文切换通过存储和恢复CPU状态使得其能够从中断...

2017-01-11 20:44:31

阅读数 6211

评论数 25

Java 并发:volatile 关键字解析

在Java并发编程中,要想使并发程序能够正确地执行必须要保证三条原则:原子性、可见性和有序性。只要有一条原则没有被保证,就有可能导致线程安全性问题。volatile关键字被用来保证可见性,即保证共享变量的内存可见性以解决缓存一致性问题,同时其还会禁止进行指令重排序。volatile关键字主要用于使...

2016-12-15 16:26:41

阅读数 8581

评论数 91

提示
确定要删除当前文章?
取消 删除
关闭
关闭