![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC并发编程学习
文章平均质量分 93
JUC并发编程基础知识学习
狂奔の蜗牛rz
一名普通的Java初学者,希望认识更多大佬
展开
-
JUC并发编程基础之线程池和线程池参数
前言:在面试过程中,我们可能会被面试官经常问到有关线程池和线程池参数的相关问题,如果对于这些问题,你的心中没有明确的答案,那么在看完本篇博客后,相信你将会有所收获!1.1 为什么要用线程池?降低资源消耗:提高线程利用率,降低创建和销毁线程的消耗提高响应速度:任务来了,直接有线程可用可执行,而不是先创建线程再执行提高线程的可管理性:线程是稀缺资源,使用线程池可以统一分配调优监控1.2 线程池参数的解释1. corePoolSize定义:corePoolSize 代表的是核心线程数,也就原创 2021-08-31 23:43:13 · 708 阅读 · 0 评论 -
JUC并发编程学习之并发三大特性
前言:在并发编程的学习中,并发三大特性是我们肯定会遇到的知识点,在面试中,也会常常被问到,那么并发的三大特性到底包括哪些呢?我们如何能够快速理解它,今天的博客将会带大家有一个彻底的了解!1.1 串行、并行和并发的区别在了解并发三大特性之前,我们需要先了解一下串行、并行和并发之间的区别,它们之间的区别到底是什么呢?快来看看吧!串行:在时间上不可能发生重叠,前一个任务没搞定,下一个任务只能等着并行:在时间上是重叠的,两个任务在同一时刻互不干扰的同时执行 (多个CPU同时执行)并发:允许两个任原创 2021-08-31 00:30:23 · 417 阅读 · 0 评论 -
JUC并发编程基础学习之HashMap线程安全问题
前言:在进行HashMap的线程安全测试前,我们先来思考几个问题,HashMap的正确使用方法是什么?你平时习惯的使用方式是否正确?如果不正确,那么正确的使用方式到底是什么呢?如果你对HashMap的使用存有疑虑,相信你在看完本篇博客后将会有所收获!1.HashMap线程安全测试1.1 HashMap的使用方式1.1.1 习惯的使用方式我们平常在使用HashMap时,通常的使用习惯可能如下://获取一个HashMap对象Map<String,String> map = new原创 2021-08-28 00:03:27 · 221 阅读 · 0 评论 -
JUC并发编程基础学习之Set集合线程安全问题
前言:上一篇博客我们发现并发情况下使用ArrayList线程不安全,那么Set集合在多线程环境下,是否线程安全呢?后面还会对HashSet的源码进行浅析,这就是今天我们所要学习和讨论的问题!1.1 测试Set集合是否线程安全1. 首轮Set集合安全测试1-1 测试代码package com.kuang.unsafe;import java.util.Collections;import java.util.HashSet;import java.util.Set;import jav原创 2021-07-31 22:49:38 · 531 阅读 · 0 评论 -
JUC并发编程基础学习之List集合线程安全问题
2.4 List集合线程不安全之前我们在使用ArrayList的时候,觉得它并没有不安全,是因为我们是在单线程环境下使用的,如果在多线程环境下,那么ArrayList就不够安全了!2.4.1 测试List集合是否安全1.单线程下测试ArrayList集合源码分析:package java.util;/** * @author Josh Bloch * @author Neal Gafter * @see Collection * @see List * @原创 2021-07-30 23:56:50 · 368 阅读 · 0 评论 -
JUC并发编程基础学习之彻底理解八锁问题
前言:大家好,今天我们一起来学习JUC并发编程中的八锁问题!希望你在看完本文后会对八锁问题彻底理解!1.1 只存在一个资源类模拟场景:只存在一个资源对象,判断手机是先打电话还是先发短信?1.让发短信休眠1-1 问题思考思考1:只存在一个资源对象,如果将线程B(发短信)进行休眠,先执行打电话还是发短信?1-2 代码实现package com.kuang.lock8;import java.util.concurrent.TimeUnit;/** * @ClassNam原创 2021-07-28 00:17:11 · 94 阅读 · 0 评论 -
JUC并发编程基础学习之生产者消费者问题
前言:面试常问:单例模式,排序算法,生产者和消费者问题,死锁问题解决生产者消费者问题,我们可以使用synchronized或者Lock锁来解决,这就是我们今天所要学习和讨论的问题!1.传统的生产者消费者问题1-1 什么是生产者消费者问题?本质上是 线程之间的通信问题 (即等待唤醒和通知唤醒)例如线程交替执行, A、B操作同一个变量 num=0, A: num+1, B: num+11-2 生产者消费者实现步骤生产者,消费者问题三步走:判断是否进入等待执行相关业务通知其他线原创 2021-07-25 00:21:20 · 194 阅读 · 0 评论 -
JUC并发编程基础学习之Synchronized锁和ReentrantLock锁的使用和区别
在多线程的学习中,想必大家都听说过大名鼎鼎的synchronized,使用synchronized可以解决线程安全问题,提到了synchronized,那又不得不提到ReentrantLock,那么它们的具体使用和区别到底是什么呢?这就是今天我们所要学习的内容!1.传统的Synchronized锁1-1 查看Runnable接口源码//我们发现,在Runable接口前,有一个@FunctionalInterface注解,表明该接口是函数式接口@FunctionalInterfacepublic.原创 2021-07-19 23:36:50 · 101 阅读 · 0 评论 -
多线程基础学习之线程安全和抢火车票问题
前言:在生活中,每次出远门,避免不了的就是要坐火车或者高铁,那么抢票就是我们必须要经历的环节,但你是否想过,假如你和别人同时抢到一张票,会发生什么?你肯定会疑惑,如果两个人都买到一张票,那么这张票到底算谁的,这显然是不符合常理的,那么怎样才能避免不会买到同买一张票?这就是今天我们要思考的问题;其实这里面涉及到了Java中的多线程以及线程安全的问题,保证线程安全也是我们在实际开发中所需要重点关注的,那么用Java代码如何来实现和解决这个经典的抢火车票问题?在用代码实现抢火车票问题前,你是否有疑原创 2021-07-18 20:38:01 · 1689 阅读 · 2 评论 -
多线程基础学习
1. 线程和进程的区别是什么?1.1 线程和进程的定义线程:线程是CPU调度和执行的单位 (例如,Java中的main函数就是主线程,而垃圾回收器对应的就是GC线程,这也是Java默认的两个线程)1.2 进程进程:进程就是多个在操作系统中运行的程序 (比如你电脑上此刻只在运行的IDEA,腾讯QQ,网易云音乐和爱奇艺等软件)有人可能要问了,腾讯QQ和爱奇艺不是应用程序吗?怎么会是进程呢?注意:我说的是正在运行的应用程序,因为从概念上讲,程序是指令和数据的一个有序集合,是一个静态概念,其本身并没有任原创 2021-07-17 22:08:14 · 170 阅读 · 0 评论