
java并发专栏
有关并发的基础知识,在这里查看,
风中有朵雨做的云yi
没吃过学习的苦,就必须得吃生活的苦.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
关于三种线程不安全的情况,用synchronized解决的办法
很多时候我们都会谈到线程不安全的情况.由于cpu的执行速度太快,出现了几个线程争夺一个资源的情况,进而引发一系列的问题. 比如说,买票不安全,银行取钱不安全,甚至面试会问的ArrayList在线程中安不安全,答案肯定是否定的,毕竟会出现数据覆盖的问题. 下面列举三种不安全的代码 买票不安全,几个人买到了同一张票: package com.qiu.syn; //不安全的买票 //线程不安全,有拿到重...原创 2020-04-24 18:20:39 · 587 阅读 · 0 评论 -
多线程之死锁问题
死锁的代码: package com.qiu.syn; //死锁:多个线程互相抱着对方需要的资源,然后形成僵持 public class DeadLock { public static void main(String[] args) { Makeup g1 = new Makeup(0, "我"); Makeup g2 = new Makeup(1, "...原创 2020-04-24 21:52:51 · 195 阅读 · 0 评论 -
多线程之线程通信(管程法,信号灯法)
1.生产者消费者模式 代码: 1.管程法解决生产者消费者问题 package com.qiu.syn; //测试生产者消费者-->利用缓冲区解决:管程法 //生产者,消费者,产品,缓冲区 public class TestPC { public static void main(String[] args) { SynContainer synContainer =...原创 2020-04-24 22:00:22 · 315 阅读 · 0 评论 -
多线程之线程池的两种使用方法
代码: package com.qiu.syn; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; //测试线程池 public class TestPool { public static void main(String[] args) { //1....原创 2020-04-24 22:02:37 · 212 阅读 · 0 评论 -
JVM内存调优(工具Jprofiler)
内存调优是程序员必备的一项技能,也是测试最重要的一点.当程序中运行报错OOM.在时间紧急的情况下,我们必须快速找出,问题代码的行数,这个时候就需要用到一款工具叫Jprofiler,在Idea setting plugins能找到,但还需下载客户端,jprofiler官网直接下载.具体下载过程,这里不做重点讲解. 在一个项目中突然出现了OOM故障,那么该如何排除~? 研究为什么出错? 最快 能够...原创 2020-04-27 11:26:39 · 966 阅读 · 0 评论 -
java多线程Lock锁,Synchronized锁
1.传统:synchronized 代码: package com.qiu; //基本的买票票的例子 /* public static void main(String[] args) { new Thread(new MyThread()).start(); } static class MyThread implements Runnable{ ...原创 2020-04-27 20:40:34 · 229 阅读 · 0 评论 -
java多线程生产者和消费者问题(1.synchronized版(含代码详解)2.JUC版:Lock实现)
Synchonized版 wait notify package com.PC; /** * 线程之间的通信问题,生产者和消费者问题 等待唤醒,通知唤醒 * 线程交替执行,A B操作同一个变量 num =0 * A num+1 * B num -1 */ public class A { public static void main(String[] ar...原创 2020-04-27 20:45:47 · 185 阅读 · 0 评论 -
java多线程之线程八锁案例
1.八锁现象 如何判断锁的是谁?永远的知道什么锁,锁到底锁的是谁? 深刻理解我们的锁! 1.标准情况下,两个线程先打印.是先发短信还是打电话? public class Teat01 { public static void main(String[] args) { Phone phone = new Phone(); new Thread(()->...原创 2020-04-27 22:09:40 · 404 阅读 · 0 评论 -
为什么java中的集合类在线程并发中不安全(含代码详解)
现今这个时代,并发的安全问题越来越重要,几乎是每个公司面试的必问点. 其中会被问到为什么ArrayList在线程中不安全呢? 接下来我们就来探讨一下原因吧 list 不安全 package com.unsafe; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import ja...原创 2020-04-28 18:20:27 · 460 阅读 · 0 评论 -
java开启多线程方式之Callable详解
首先来看看官方文档: 理一理Runnable和Callable的不同点 1.可以有返回值 2.可以抛出异常 3.方法不同,run()/call() 底层分析为什么Callable可以有返回值 再来说一说Callable和Thread和Runnable的关系: 用一个图来形象说明下: 在Thread源码中跟Callable是没有联系的,但是Callable又想实现Thread的功能,那只能通过Ru...原创 2020-04-28 18:29:30 · 1080 阅读 · 0 评论 -
java并发编程中必须学会的三个常用的辅助类(CountDownLatch,CyclicBarrier,Semaphore)
1. CountDownLatch CountDownLatch用给定的计数初始化。 [await]方法阻塞,直到由于countDown()方法的[调用]而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await [调用立即]返回。 这是一个一次性的现象 - 计数无法重置。 如果您需要重置计数的版本,请考虑使用[CyclicBarrier] 。 package com.add;...原创 2020-04-28 18:36:13 · 267 阅读 · 0 评论 -
java多线程-读写锁ReadWriteLock
先来看看官方文档: 通过代码演示: 未加读写锁的时候: package com.readWrite; import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java...原创 2020-04-28 18:43:43 · 259 阅读 · 0 评论 -
java多线程阻塞队列分析(BlockingQueue)及SynchronousQueue:同步队列
说到队列:它是链表结构 什么时候会阻塞队列呢?如下图所示 阻塞:队列 首先我们看看阻塞队列类中的结构: 由上图可知阻塞队列和set list同等地位,故也十分重要 所以说BlockingQueue不是新的东西 问:什么时候我们会使用阻塞队列? 答:多线程,线程池多线程并发处理,线程池 Blockingdeque:双端队列:两头都可操作,能返回值 学会使用队列: 添加,移除 四组API ...原创 2020-04-28 23:29:54 · 358 阅读 · 0 评论 -
java并发编程重点之线程池详解(源码+示例)
线程池:三大方法,七大参数,四种拒绝策略 线程池,首先最要记住上面的话 池化技术 程序的运行,本质占用系统的资源!优化资源的使用!–>池化技术 线程池,连接池,内存池,对象池… 池化技术:事先准备好一些资源,有人要用就来我这拿,用完之后还给我. 线程池的好处: 1.降低资源的消耗 2.提高响应的速度 3.方便管理 总结:线程复用,控制最大并发数,管理线程 //最简单的线程池创建线程 Exec...原创 2020-04-28 23:45:10 · 362 阅读 · 0 评论 -
java大数据必须学会的类FoekJoin
什么是FoekJoin?分之合并 FoekJoin在JDK 1.7出来的,并行执行任务,大数据量!(一个线程并发成多个去处理的) 大数据:Map Reduce(把大任务拆分成小任务) ForkJoin特点:工作窃取 这个里面维护的都是双端队列 当B线程先执行完自己的任务后,会把A没有执行的任务窃取过来,自己执行,提高工作效率 ForkJoin例子 代码: package com.qiu....原创 2020-04-29 23:34:45 · 214 阅读 · 0 评论 -
Java类之异步回调
> Future设计的初衷:对将来的某个时间的结果进行建模 package com.qiu.future; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import j...原创 2020-04-29 23:37:40 · 212 阅读 · 0 评论 -
java-JMM:java内存模型详解(含代码详解)
问到JMM,那就必须谈一谈一个关键词Volatile 首先面试官会问: 请你谈谈你对Volatile的理解 Volatile是Java虚拟机提供的轻量级的同步机制(synchronized) 重要的三点: 1.保证可见性 2.不保证原子性 3.禁止指令重排 回归正题: JMM 是什么? java内存模型,不存在的东西,是概念,约定 关于Jmm的一些同步的约定: 1.线程解锁前,必须把共享变...原创 2020-04-29 23:48:59 · 392 阅读 · 0 评论 -
java面试常问关键词Volatile详解
请你谈谈你对Volatile的理解 Volatile是Java虚拟机提供的轻量级的同步机制(synchronized) 重要的三点: 1.保证可见性 代码: package com.qiu.Volatile; import java.util.concurrent.TimeUnit; public class JmmDemo01 { //如果不加Volatile程序就会死循环 ...原创 2020-04-29 23:57:08 · 191 阅读 · 0 评论 -
Lambda表达式的演变历程(含代码讲解)
首先,我们知道什么是lambda表达式. 为什么我们需要使用到Lambda表达式? 在jdk1.8之前是没有Lambda式的,最原始就是创建一个类,一个接口,一个实现类,实现类中实现逻辑代码,但是接口过多,实现类过多,类也多, 其中只要一个方法体的接口,的实现类就会有很多重复的代码.进而为了优化这一现象,才推出了Lambda表达式,当然Lambda表达式不是凭空出来的,也是经过代码简化的一步一步实...原创 2020-04-24 11:23:13 · 751 阅读 · 0 评论 -
线程休眠的两个简单应用(模拟买票,倒计时)
sleep(时间)指定当前线程阻塞的毫秒数 sleep存在异常InterruptedException sleep时间达到后线程进入就绪状态 sleep可以模拟网络延时,倒计时等 每一个对象都有一个锁,sleep不会释放锁 代码: 模拟买票: package com.qiu.state; import com.qiu.demo01.TestThreadDemo04; //模拟网络延时:放大问...原创 2020-04-24 15:23:46 · 259 阅读 · 0 评论