JUC大战
文章平均质量分 96
有文章编写有些问题,后期还会进行整改。
越来越没意思
辉煌时刻已经结束
展开
-
共享模型之不可变阶段七
7.1 日期转换的问题问题提出,下面的代码在运行时,由于 SimpleDateFormat 不是线程安全的,有很大几率出现 java.lang.NumberFormatException 或者出现不正确的日期解析结果。 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for (int i = 0; i < 10; i++) { new Thread(() -> {原创 2021-09-20 18:11:42 · 132 阅读 · 0 评论 -
JUC 共享模型之工具阶段八
8.1 线程池池化技术相比大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。这里借用《Java 并发编程的艺术》提到的来说一下使用线程池的好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即原创 2021-09-20 18:12:05 · 182 阅读 · 0 评论 -
JUC共享模型之无锁并发阶段六
6. 共享模型之无锁管程即monitor是阻塞式的悲观锁实现并发控制,这章我们将通过非阻塞式的乐观锁的来实现并发控制。友情提示:无锁并发就是不需要锁控制并发6.1 问题提出有如下需求,保证account.withdraw取款方法的线程安全public class Test5 { public static void main(String[] args) { Account.demo(new AccountUnsafe(10000)); }}cl原创 2021-09-20 18:11:22 · 182 阅读 · 0 评论 -
JUC共享模型之内存阶段五
5. 共享模型之内存上一章讲解的 Monitor 主要关注的是访问共享变量时,保证临界区代码的原子性。这一章我们进一步深入学习共享变量在多线程间的【可见性】问题与多条指令执行时的【有序性】问题5.1 Java 内存模型(JMM)JMM 即 Java Memory Model,它从java层面定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。JMM 体现在以下几个方面原子性 - 保证指令不会受到线程上下文切换的影响 可见性 - 保证指令不会受 cp原创 2021-09-20 18:10:51 · 147 阅读 · 0 评论 -
JUC共享模型之管程阶段四
4.6 wait和notify建议先看看wait和notify方法的javadoc文档API 介绍obj.wait() 让进入 object 监视器的线程到 waitSet 等待obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒 ,随机唤醒一个线程obj.notifyAll() 让 object 上正在 waitSet 等待的线程全部唤醒它们都是线程之间进行协作的手段,都属于 Object 对象的方法。必须获得此对象的锁,才能调用这几个方法原创 2021-09-20 18:10:31 · 232 阅读 · 0 评论 -
JUC之synchronized原理阶段三
友情提示学习更加详细内容查看:多线程锁synchronized挑战_亚索@哈塞给-CSDN博客4.5 Monitor 概念Java 对象头以 32 位虚拟机为例,普通对象的对象头结构如下,其中的klass Word为指针,指向对应的Class对象;数组对象 其中 Mark Word 结构为所以一个对象的结构如下:Monitor 原理Monitor被翻译为监视器或者说管程每个java对象都可以关联一个Monitor,如果使用synchronized给对象上锁..原创 2021-09-11 23:59:36 · 291 阅读 · 1 评论 -
JUC线程安全问题阶段二
线程问题4.1 线程出现问题的根本原因分析线程出现问题的根本原因是因为线程上下文切换,导致线程里的指令没有执行完就切换执行其它线程了,下面举一个例子 Test13.javastatic int count = 0; public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(()->{ for (int i = 1;i原创 2021-09-11 17:35:22 · 233 阅读 · 0 评论 -
JUC基础教程阶段一
线程与进程进程程序由指令和数据组成,但是这些指令要运行,数据要读写,就必须将指令加载到cpu,数据加载至内存。在指令运行过程中还需要用到磁盘,网络等设备,进程就是用来加载指令管理内存管理IO的 当一个指令被运行,从磁盘加载这个程序的代码到内存,这时候就开启了一个进程 进程就可以视为程序的一个实例,大部分程序都可以运行多个实例进程(例如记事本,浏览器等),部分只可以运行一个实例进程(例如360安全卫士)线程一个进程之内可以分为一到多个线程。 一个线程就是一个指令流,将指令流中的一条条指令以原创 2021-09-11 14:51:32 · 242 阅读 · 0 评论 -
多线程锁synchronized挑战
synchronized概述基本使用参考文档:https://www.cnblogs.com/bjlhx/p/10555194.html为确保共享变量不会出现并发问题,通常会对修改共享变量的代码块用synchronized加锁,确保同一时刻只有一个线程在修改共享变量,从而避免并发问题。 synchronized结论: 1、java5.0之前,协调线程间对共享对象的访问的机制只有synchronized和volatile,但是内置锁在功能上存在一些局限性,jdk5增加了Lock以及Ree原创 2021-05-21 16:57:26 · 114 阅读 · 0 评论 -
JUC教程
为什么叫什么是JUC从下图能看出在java.util工具包注意:Runnable没有返回值,Callable有返回值,除此之外,Runnable的效率没有Callable效率高理解线程和进程进程:一个程序,QQ.exe Music.exe 程序的集合;进程中至少有一个线程,这个线程是守护进程线程:开了一个进程 Typora,写字,自动保存(线程负责的)通俗来说,就是进程内部有多个线程,进程实现功能都是依靠这些进程去实现的在java中线程有:Thread、Runnable、Ca原创 2021-05-20 15:33:00 · 115 阅读 · 0 评论 -
多线程锁架构
Java 中15种锁的介绍参考文档:https://www.cnblogs.com/chinaifae/articles/10232169.html在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:公平锁 / 非公平锁 可重入锁 / 不可重入锁 独享锁 / 共享锁 互斥锁 / 读写锁 乐观锁 / 悲观锁 分段锁 偏向锁 / 轻量级锁 / 重量级锁 自旋锁上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指.原创 2021-05-20 18:57:20 · 95 阅读 · 0 评论