
并发
文章平均质量分 96
Lerendan
这个作者很懒,什么都没留下…
展开
-
暴力突破 Java 并发 - ThreadLocal 原理解析
一、ThreadLocal 使用ThreadLocal 是一个关于创建线程局部变量的类。通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。而使用hreadLocal建的变量只能被当前线程访问,其他线程则无法访问和修改。接下来我们 ThreadLocal 如何使用:创建,支持泛型:ThreadLocal<String> mStringThreadLocal = n...原创 2020-04-08 21:02:28 · 245 阅读 · 0 评论 -
暴力突破 Java 并发 - 线程池
一、线程池的定义相比 new Thread() 方法创建线程,Java 提供线程池的好处在于:重用存在的线程,减少线程创建、消亡的开销,性能佳。 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。 提供定时执行、定期执行、单线程、并发数控制等功能。ExecutorService 是最初的线程池接口,ThreadPoolExecutor 类是对线程池的...原创 2020-04-08 19:37:26 · 258 阅读 · 0 评论 -
暴力突破 Java 并发 - 线程间的协作(wait、notify、notifyAll、yield、join)
一、线程的状态Java 中线程中状态可分为五种:New:新建状态,当线程创建完成时为新建状态,即new Thread(...),还没有调用start方法时,线程处于新建状态。 Runnable:就绪状态,当调用线程的的start方法后,线程进入就绪状态,等待CPU资源。处于就绪状态的线程由Java运行时系统的线程调度程序(thread scheduler)来调度。 Running:运行...原创 2020-04-08 10:33:16 · 255 阅读 · 0 评论 -
暴力突破 Java 并发 - CAS 解析
一、CAS 概念在 JDK 5 之前 Java 语言是靠 synchronized 关键字保证同步的,这会导致有锁,锁机制存在以下问题:在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 一个线程持有锁会导致其它所有需要此锁的线程挂起。 如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile 是不错的机制,但是 ...原创 2020-04-07 22:48:43 · 296 阅读 · 1 评论 -
暴力突破 Java 并发 - Lock 显示锁解析
一、前言前面《Java 并发 - synchronize 解析》我们详谈过解决多线程同步问题的关键字 synchronized,synchronized 属于隐式锁,即锁的持有与释放都是隐式的,我们无需干预,而本篇我们要讲解的是显式锁,即锁的持有和释放都必须由我们手动编写。二、Lock 接口2.1 Lock接口简介锁是用于通过多个线程控制对共享资源的访问的工具。通常,锁提...原创 2020-02-09 18:43:29 · 550 阅读 · 0 评论 -
暴力突破 Java 并发 - synchronize 解析
一、前言线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁,即能达到互斥访问目的的锁,也就是说当...原创 2020-02-08 22:13:36 · 304 阅读 · 0 评论 -
暴力突破 Java 并发 - volatile 原理解析
一、前言volatile 关键字可以说是 JAVA 比较难理解的一个关键字了,这篇博客主要梳理一下它的含义。二、volatile 解析2.1JAVA内存模型简介这块知识必须要对 JAVA 内存模型有个基本的认识,所以先简单讲一下 JAVA 内存模型。Java 内存模型规定了所有的变量都存储在主内存中。每条线程中还有自己的工作内存,线程的工作内存中保存了被该线程所使用...原创 2020-02-08 17:10:08 · 365 阅读 · 0 评论