
并发编程
文章平均质量分 95
Kopoo_
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
并发编程-线程池&J.U.C
8. 共享模型之工具 8.1 线程池 池化技术相比大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。 线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。 这里借用《Java 并发编程的艺术》提到的来说一下使用线程池的好处: 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可.原创 2021-01-29 18:38:22 · 221 阅读 · 0 评论 -
并发编程-共享模型之不可变
7.1 日期转换的问题 如果一个对象在不能够修改其内部状态(属性),那么它就是线程安全的,因为不存在并发修改啊!这样的对象在 Java 中有很多,例如在 Java 8 后,提供了一个新的日期格式化类DateTimeFormatter 可变类内部成员变量是可以改变的就容易出现线程不安全问题‘ 可以用锁来保证线程安全 7.2 不可变设计 更多不可变类的知识,可参考这这里 final类的知识,参考这里 另一个大家更为熟悉的 String 类也是不可变的,以它为例,说明一下不可变类设计的要素..原创 2021-01-29 17:25:43 · 121 阅读 · 0 评论 -
并发编程(共享模型之无锁)
管程即monitor是阻塞式的悲观锁实现并发控制,这章我们将通过非阻塞式的乐观锁的来实现并发控制 本章内容 CAS 与 volatile 原子整数 原子引用 原子累加器 Unsafe 6.1 问题提出 有如下需求,保证account.withdraw取款方法的线程安全 package cn.itcast.test; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.原创 2021-01-14 20:56:50 · 302 阅读 · 0 评论 -
并发编程(共享模型之内存)
5. 共享模型之内存 上一章讲解的 Monitor 主要关注的是访问共享变量时,保证临界区代码的原子性。这一章我们进一步深入学习共享变量在多线程间的【可见性】问题与多条指令执行时的【有序性】问题 5.1 Java 内存模型 JMM 即 Java Memory Model,它从java层面定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。JMM 体现在以下几个方面 原子性 - 保证指令不会受到线程上下文切换的影响 可见性 - 保证指令不会受 cpu 缓存的原创 2021-01-11 21:48:41 · 274 阅读 · 0 评论 -
并发编程(ReentrantLock&&同步模式之顺序控制)
4.13 ReentrantLock 相对于 synchronized 它具备如下特点 可中断 可以设置超时时间 可以设置为公平锁 支持多个条件变量,即对与不满足条件的线程可以放到不同的集合中等待 与 synchronized 一样,都支持可重入 基本语法 // 获取锁 reentrantLock.lock(); try { // 临界区 } finally { // 释放锁 reentrantLock.unlock(); } 可重入 可重入是指同一个线程如果首次获得了这把锁,那么原创 2021-01-05 11:28:24 · 240 阅读 · 0 评论 -
并发编程(共享模型之管程wait notify)
本文主要讲解wait/notify的正确使用姿势、park/unpark、join()的原理、模式之生产者-消费者模式(异步)、保护性暂停模式(同步)、线程状态转换的流程、死锁和活锁以及如何检查死锁等。 一、 wait notify API 介绍 obj.wait() 让进入 object 监视器的线程到 waitSet 等待 obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒 obj.notifyAll() 让 object 上正在 waitSet.原创 2020-11-17 20:57:16 · 369 阅读 · 0 评论 -
并发编程(共享模型之管程)
4.1 共享带来的问题 线程出现问题的根本原因是因为线程上下文切换,导致线程里的指令没有执行完就切换执行其它线程了,下面举一个例子 Test13.java 两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗? static int count = 0; public static void main(String[] args) throws InterruptedException { Thre...原创 2020-11-10 19:00:00 · 183 阅读 · 0 评论 -
并发编程(进程与线程)
工作用的很少,但是面试必考 参考的大佬博客:https://gitee.com/gu_chun_bo/java-construct/blob/master/java%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/java%E5%B9%B6%E5%8F%911.md 线程与进程 2.1 进程与进程 进程 程序由指令和数据组成,但是这些指令要运行,数据要读写,就必须将指令加载到cpu,数据加载至内存。在指令运行过程中还需要用到磁盘,网络等设备,进程就是用来加载指令管理内.原创 2020-11-02 17:24:35 · 439 阅读 · 0 评论