java并发专栏
有关并发的基础知识,在这里查看,
风中有朵雨做的云yi
没吃过学习的苦,就必须得吃生活的苦.
展开
-
关于三种线程不安全的情况,用synchronized解决的办法
很多时候我们都会谈到线程不安全的情况.由于cpu的执行速度太快,出现了几个线程争夺一个资源的情况,进而引发一系列的问题.比如说,买票不安全,银行取钱不安全,甚至面试会问的ArrayList在线程中安不安全,答案肯定是否定的,毕竟会出现数据覆盖的问题.下面列举三种不安全的代码买票不安全,几个人买到了同一张票:package com.qiu.syn;//不安全的买票//线程不安全,有拿到重...原创 2020-04-24 18:20:39 · 544 阅读 · 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 · 157 阅读 · 0 评论 -
多线程之线程通信(管程法,信号灯法)
1.生产者消费者模式代码:1.管程法解决生产者消费者问题package com.qiu.syn;//测试生产者消费者-->利用缓冲区解决:管程法//生产者,消费者,产品,缓冲区public class TestPC { public static void main(String[] args) { SynContainer synContainer =...原创 2020-04-24 22:00:22 · 271 阅读 · 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 · 184 阅读 · 0 评论 -
JVM内存调优(工具Jprofiler)
内存调优是程序员必备的一项技能,也是测试最重要的一点.当程序中运行报错OOM.在时间紧急的情况下,我们必须快速找出,问题代码的行数,这个时候就需要用到一款工具叫Jprofiler,在Idea setting plugins能找到,但还需下载客户端,jprofiler官网直接下载.具体下载过程,这里不做重点讲解.在一个项目中突然出现了OOM故障,那么该如何排除~?研究为什么出错?最快能够...原创 2020-04-27 11:26:39 · 819 阅读 · 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 · 196 阅读 · 0 评论 -
java多线程生产者和消费者问题(1.synchronized版(含代码详解)2.JUC版:Lock实现)
Synchonized版 wait notifypackage 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 · 161 阅读 · 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 · 365 阅读 · 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 · 433 阅读 · 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 · 1032 阅读 · 0 评论 -
java并发编程中必须学会的三个常用的辅助类(CountDownLatch,CyclicBarrier,Semaphore)
1. CountDownLatchCountDownLatch用给定的计数初始化。 [await]方法阻塞,直到由于countDown()方法的[调用]而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await [调用立即]返回。 这是一个一次性的现象 - 计数无法重置。 如果您需要重置计数的版本,请考虑使用[CyclicBarrier] 。package com.add;...原创 2020-04-28 18:36:13 · 229 阅读 · 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 · 213 阅读 · 0 评论 -
java多线程阻塞队列分析(BlockingQueue)及SynchronousQueue:同步队列
说到队列:它是链表结构什么时候会阻塞队列呢?如下图所示阻塞:队列首先我们看看阻塞队列类中的结构:由上图可知阻塞队列和set list同等地位,故也十分重要所以说BlockingQueue不是新的东西问:什么时候我们会使用阻塞队列?答:多线程,线程池多线程并发处理,线程池Blockingdeque:双端队列:两头都可操作,能返回值学会使用队列:添加,移除四组API...原创 2020-04-28 23:29:54 · 320 阅读 · 0 评论 -
java并发编程重点之线程池详解(源码+示例)
线程池:三大方法,七大参数,四种拒绝策略线程池,首先最要记住上面的话池化技术程序的运行,本质占用系统的资源!优化资源的使用!–>池化技术线程池,连接池,内存池,对象池…池化技术:事先准备好一些资源,有人要用就来我这拿,用完之后还给我.线程池的好处:1.降低资源的消耗2.提高响应的速度3.方便管理总结:线程复用,控制最大并发数,管理线程//最简单的线程池创建线程Exec...原创 2020-04-28 23:45:10 · 317 阅读 · 0 评论 -
java大数据必须学会的类FoekJoin
什么是FoekJoin?分之合并FoekJoin在JDK 1.7出来的,并行执行任务,大数据量!(一个线程并发成多个去处理的)大数据:Map Reduce(把大任务拆分成小任务)ForkJoin特点:工作窃取这个里面维护的都是双端队列当B线程先执行完自己的任务后,会把A没有执行的任务窃取过来,自己执行,提高工作效率ForkJoin例子代码:package com.qiu....原创 2020-04-29 23:34:45 · 180 阅读 · 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 · 164 阅读 · 0 评论 -
java-JMM:java内存模型详解(含代码详解)
问到JMM,那就必须谈一谈一个关键词Volatile首先面试官会问:请你谈谈你对Volatile的理解Volatile是Java虚拟机提供的轻量级的同步机制(synchronized)重要的三点:1.保证可见性2.不保证原子性3.禁止指令重排回归正题:JMM 是什么?java内存模型,不存在的东西,是概念,约定关于Jmm的一些同步的约定:1.线程解锁前,必须把共享变...原创 2020-04-29 23:48:59 · 346 阅读 · 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 · 168 阅读 · 0 评论 -
Lambda表达式的演变历程(含代码讲解)
首先,我们知道什么是lambda表达式.为什么我们需要使用到Lambda表达式?在jdk1.8之前是没有Lambda式的,最原始就是创建一个类,一个接口,一个实现类,实现类中实现逻辑代码,但是接口过多,实现类过多,类也多, 其中只要一个方法体的接口,的实现类就会有很多重复的代码.进而为了优化这一现象,才推出了Lambda表达式,当然Lambda表达式不是凭空出来的,也是经过代码简化的一步一步实...原创 2020-04-24 11:23:13 · 662 阅读 · 0 评论 -
线程休眠的两个简单应用(模拟买票,倒计时)
sleep(时间)指定当前线程阻塞的毫秒数sleep存在异常InterruptedExceptionsleep时间达到后线程进入就绪状态sleep可以模拟网络延时,倒计时等每一个对象都有一个锁,sleep不会释放锁代码:模拟买票:package com.qiu.state;import com.qiu.demo01.TestThreadDemo04;//模拟网络延时:放大问...原创 2020-04-24 15:23:46 · 230 阅读 · 0 评论