随笔分类 - 并发与多线程
摘要:前言: 上一篇分析了Synchronized关键字的用法详解,本篇则对Synchronized关键字对底层实现原理进行详细分析。 Synchronized关键字是并发编程中的元老级别角色,因此被人们习惯性称为“重量级锁”,随着Java SE1.6的优化,Synchronized引入了偏向锁和轻量级锁
阅读全文
摘要:前言 在单线程模型下,想要获取方法执行的结果比较简单,直接获取方法返回的结果即可。但是在多线程情况下,如何获取其他线程执行的结果,此时就涉及到多线程之间数据传输的问题。比如A线程内部开启B线程和C线程,A线程如何获取B、C线程的执行结果呢?另外在B、C线程执行过程中,A线程是一直处于阻塞状态等待还是
阅读全文
摘要:前言 之前分析的ReentrantLock以及Synchronized都是排他锁,同一时间只允许一个线程进行资源的访问,但是有时需要允许多线程对资源进行读访问,而不允许多线程对资源写访问时,ReentrantLock和Synchronzied很显然就无法实现,好在JUC中已经实现了,就是本文需要分析
阅读全文
摘要:前言: JUC中提供了很多同步工具类,比如CountDownLatch、CyclicBarrier、Semaphore等,都可以作用同步手段来实现多线程之间的同步效果 一、CountDownLatch 1.1、CountDownLatch的使用 CountDownLatch可以理解为是同步计数器,作
阅读全文
摘要:前言 ReentrantLock是JUC提供的可重入锁的实现,用法上几乎等同于Synchronized,但是ReentrantLock在功能的丰富性上要比Synchronized要强大。 一、ReentrantLock的使用 ReentrantLock实现了JUC中的Lock接口,Lock接口定义了
阅读全文
摘要:ThreadLocal 是本地线程变量,是一个以ThreadLocal对象为key,任意对象为value的存储结构。 一、使用案例 1.定义线程类MyThread,代码如下: 2.测试方法Main方法 定义两个线程,线程的run方法执行了ThreadLocal变量的set操作,然后再执行get操作,
阅读全文
摘要:AQS是AtractQueuedSynchronizer(队列同步器)的简写,是用来构建锁或其他同步组件的基础框架。主要通过一个int类型的state来表示同步状态,内部有一个FIFO的同步队列来实现。 AQS的使用方式是通过子类继承来实现,子类继承同步器并且实现抽象方法来完成同步,实现过程中涉及到
阅读全文
摘要:阻塞队列(Blocking Queue) 一、队列的定义 说的阻塞队列,就先了解下什么是队列,队列也是一种特殊的线性表结构,在线性表的基础上加了一条限制:那就是一端入队列,一端出队列,且需要遵循FIFO(先进先出)的原则 队列的入口一端叫做队尾(rear),出口一端叫做队头(front),最简单的比
阅读全文
摘要:一、线程主要有以下几种状态: new(新建):线程刚刚被创建 runnable(就绪):新建的线程执行start方法进入就绪状态等待系统调度分配CPU,被分配了之后就进入运行中状态 blocked(阻塞):当线程执行被锁的代码块或方法时,等待其他线程释放锁而处于阻塞状态 waiting(等待):线程
阅读全文
摘要:一、Executor框架介绍 Executor框架将Java多线程程序分解成若干个任务,将这些任务分配给若干个线程来处理,并得到任务的结果 1.1、Executor框架组成 任务:被执行任务需要实现的接口:Runnable接口或Callable接口 任务的执行:任务执行的核心接口Executor以及
阅读全文
摘要:前言: Java中的线程池是并发框架中运用最多的,几乎所有需要异步或并发执行任务的程序都可以使用线程池,线程池主要有三个好处: 1、降低资源消耗:可以重复使用已经创建的线程降低线程创建和销毁带来的消耗 2、提高响应速度:执行任务时,不需要等待线程的创建就可以直接执行任务 3、提高线程的可管理性:线程
阅读全文

浙公网安备 33010602011771号