Java并发编程的艺术笔记
103style
拿得起,放得下。
展开
-
Java Thread.join()详解
一、使用方式。 join()是Thread类的一个方法,启动线程后直接调用,例如: Thread t = new AThread(); t.start(); t.join(); 二、为什么要用join()方法 在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是 主线程需要等...原创 2019-03-26 14:02:37 · 7380 阅读 · 2 评论 -
Java内存模型
转载请以链接形式标明出处: 本文出自:103style的博客 目录 内存模型基础 volatile的内存语义 锁的内存语义 final域的内存语义 happens-before 双重检查锁定与延迟初始化 Java内存模型综述 小结 内存模型基础 1、并发编程的两个关键问题 线程之间如何通信? 通信是指 以何种机制来交换信息。 命令式编程中线程的通信机制主要是以下两种: 共享内存 的并...原创 2019-06-12 13:30:19 · 195 阅读 · 0 评论 -
Java并发编程基础
转载请以链接形式标明出处: 本文出自:103style的博客 目录 线程的简介 启动和终止线程 线程间通信 小结 线程的简介 什么是线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 为什么要使用多线程 目前的处理器核心越来越多,使用多线程能...原创 2019-06-10 14:16:59 · 162 阅读 · 0 评论 -
Java中的锁的使用和实现介绍
转载请以链接形式标明出处: 本文出自:103style的博客 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 源代码基于 1.8.0 目录 Lock接口 队列同步器 重入锁 读写锁 LockSupport工具 Condition接口 小结 Lock接口 在Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供...原创 2019-06-15 13:16:52 · 2869 阅读 · 0 评论 -
Executor框架
转载请以链接形式标明出处: 本文出自:103style的博客 前言 在Java中,使用线程来异步执行任务。 Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源。 同时,为每一个任务创建一个新线程来执行,这种策略可能会使处于高负荷状态的应用最终崩溃。 Java的线程既是工作单元,也是执行机制。 从 JDK 5 开始,把 ...原创 2019-05-29 15:58:34 · 2167 阅读 · 1 评论 -
Java并发机制的底层实现原理
转载请以链接形式标明出处: 本文出自:103style的博客 Java代码 编译之后 得到 Java字节码,被 类加载器加载到JVM中,最终 转化为汇编指令。 volatile volatile是轻量级的synchronized,被volatile修饰的变量,在一个线程能读到这个变量被另一个线程修改之后的值。 volatile不会引起线程上下文切换和调度。 volatile的两条实现原则 ...原创 2019-06-12 14:39:23 · 161 阅读 · 0 评论 -
Java中的线程池
转载请以链接形式标明出处: 本文出自:103style的博客 前言 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。 在开发过程中,合理地使用线程池能够带来3个好处。 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资...原创 2019-05-28 18:07:30 · 127 阅读 · 0 评论 -
Java中的并发工具类
转载请以链接形式标明出处: 本文出自:103style的博客 简介 在JDK的并发包里提供了几个非常有用的并发工具类。 提供并发流程控制的工具类 CountDownLatch CyclicBarrier Semaphore 提供了在线程间交换数据的工具类 Exchanger 本文会配合一些应用场景来介绍如何使用这些工具类。 等待多线程完成的CountDownLatch C...原创 2019-05-28 13:43:43 · 151 阅读 · 0 评论 -
Java中的12个原子操作类
简介 当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值。 比如变量 i = 1,A 线程更新 i+1,B 线程也更新i+1,经过两个线程操作之后可能 i 不等于 3,而是等于 2 。 因为 A 和 B 线程在更新变量 i 的时候拿到的 i 都是 1,这就是 线程不安全的更新操作,通常我们会使用 synchronized 来解决这个问题,synchronized 会保证多线程不...原创 2019-05-27 19:58:21 · 164 阅读 · 0 评论 -
并发编程的挑战
并发编程的目的与挑战 并发编程的目的是为了让程序运行得更快。启动更多的线程并不一定就能让程序最大限度地并发执行。 希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战。比如 上下文切换 的问题 死锁 的问题 硬件和软件的资源限制问题 上下文切换 单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以C...原创 2019-03-26 23:04:48 · 145 阅读 · 0 评论 -
Java并发容器和框架
转载请以链接形式标明出处: 本文出自:103style的博客 base on open jdk 1.8 目录 ConcurrentHashMap ConcureentLinkedQueue Java中的阻塞队列 Fork / Join 框架 小结 ConcurrentHashMap 为什么要使用 ConcurrentHashMap 原因有三:并发编程中HashMap会导致死循环;Hash...原创 2019-07-10 16:19:59 · 235 阅读 · 0 评论