![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程
wzcspace
这个作者很懒,什么都没留下…
展开
-
Java并发编程的艺术(六)——线程池
我们为什么要使用线程池? 顾名思义,线程池就是一个存放了很多线程的“池”,就像粮仓一样,每次我们需要使用线程的时候都可以先去“池子”里看看有没有空闲的线程,如果有直接拿出来用就可以了。 为什么要提前准备好这些线程并把他们存储起来呢? 因为对于系统来说创建和销毁线程是非常消耗资源的,如果我们提前把一定数量的线程创建好并存储起来(不进行销毁),那么系统一旦到需要使用线程的时候就不需要重新创建了,而是到...原创 2020-02-27 02:07:23 · 147 阅读 · 0 评论 -
java并发编程的艺术(五)——五花八门的锁
多线程编程的很多实现是依靠锁完成的。 锁在操作系统层面通过test and set 或者 compare and set等汇编指令实现的 Java通过一些native的compareAndSet方法(每次看到native就蠢蠢欲动要去看native背后又是什么东西…) 可以说Java所有的锁以及Java.util.concurrent包都是基于compareAndSet方法的各式组合构建出来的。接...原创 2020-02-12 05:38:17 · 132 阅读 · 0 评论 -
Java并发编程的艺术(四)——进程与线程
进程(process)是操作系统启动的一个程序,是操作系统资源分配的最小单元,一个进程可以包含多个线程 线程(thread)是的CPU调度的最小单元 线程的状态(6种): new:创造实例初始化,但未进行start()方法的调用,所以此时的线程还没到就绪态 runnable:就绪和运行态统称为“运行” waiting:需要等待其他线程做出一些特定的动作(通知或者中断) timed—waiting...原创 2020-02-10 03:45:54 · 105 阅读 · 0 评论 -
Java并发编程的艺术(三)————synchronized,volatile与final
本章节主要介绍多线程编程中用的比较多的三个关键词,分别是 synchronized, volatile, final 在开始之前首先要明白JMM模型的内容,即每个线程都是有自己本地的内存,用来存储变量和数据备份的。模型如下图: 具体可参见前一章Java并发编程的艺术(二)——Java内存模型 接下来一起进入这些关键字的世界~ 1. synchronized 英文含义就是“同步”,非常的直接明了,就...原创 2020-02-07 23:13:11 · 176 阅读 · 0 评论 -
Java并发编程的艺术(二)——Java内存模型
Java内存模型 软件和硬件的共同目标是在不改变程序执行结果的前提下尽可能提高并行度,从而提高运行的效率(在准确的前提下越快越好) 多线程情况下如何不改变程序执行结果会引发如下的思考: 问题: 线程之间如何通信 线程之间如何同步 JVM内存中的方法区以及Java堆是线程共享的区域,在程序运行过程中不断的有线程修改共享区域中的变量值,那么如何确保多线程情况下程序运行的结果依旧是正确的? 首先我们...原创 2020-01-30 02:27:08 · 119 阅读 · 0 评论 -
Java并发编程的艺术(一)——Java并发的基础知识
上学期学习了计算机组成,跟着老师用C++模拟了一下CPU的流水线以及缓存之后发现正因为工程师对于性能与效率的极致追求才有了现在先进的各式计算机设备。最近看了java虚拟机的书后也发现了虚拟机优化这块用到了很多并行架构,比如G1,CMS垃圾回收器就是用到了多线程。在当今多核架构盛行的情况下,如何高效的利用多个CPU协同工作,成为提高程序运行速率的核心技术点之一。 多核心协同工作在编程界就是所谓的并发...原创 2020-01-29 12:49:34 · 141 阅读 · 0 评论