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