
并发编程系列
文章平均质量分 58
Java全栈研发大联盟
好记性不如烂笔头,好好学
展开
-
玩转ThreadLocal
ThreadLocal使用后务必调用remove方法。最简单有效的方法是使用后将其移除。原创 2022-04-13 17:07:03 · 454 阅读 · 0 评论 -
SimpleDateFormat类的线程安全问题和解决方案
有些小伙伴可能会提出疑问:我们生产环境上一直在使用SimpleDateFormat类来解析和格式化日期和时间类型的数据,一直都没有问题啊!我的回答是:没错,那是因为你们的系统达不到SimpleDateFormat类出现问题的并发量,也就是说你们的系统没啥负载!SimpleDateFormat类不是线程安全的根本原因是:SimpleDateFormat是继承自DateFormat类,DateFormat类中维护了一个全局的Calendar变量,DateFormat类中的Calendar对象被多线程共享,而C原创 2022-04-13 16:39:21 · 700 阅读 · 0 评论 -
玩转CompletableFuture异步编程
CompletableFuture.supplyAsyncFuture是Java5新加的一个接口,它提供了一种异步并行计算的功能。如果主线程需要执行一个很耗时的计算任务,我们就可以通过future把这个任务放到异步线程中执行。主线程继续处理其他任务,处理完成后,再通过Future获取计算结果。老爸有俩孩子:小红和小明。老爸想喝酒了,他让小红去买酒,小红出去了。然后老爸突然想吸烟了,于是老爸让小明去买烟。在面对对象的思想中,一般会把买东西,然后买回来这件事作为一个方法,如果按照顺序结构或者使用多线程同步原创 2022-04-10 15:44:42 · 2542 阅读 · 0 评论 -
简易版消息队列的实现
简易版消息队列的实现import java.util.Random;import java.util.Vector;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;import java.util.stream.IntStream;public class Factory {原创 2020-07-22 16:57:32 · 1583 阅读 · 0 评论 -
并发容器、框架、工具类
解释: 不如这样理解semaphore,维护的计数器的值是“目前允许访问的剩余线程个数”,一旦该值为0就不允许其他线程再来访问了小疑问: Exchanger这个框架我还没有用过呢!...原创 2019-03-07 17:47:58 · 487 阅读 · 0 评论 -
并发编程基础与原子操作
小疑问: 上面的Thread的构造方法和我们平时new Thread()感觉有点区别啊?平时写的时候没有写“ThreadGroup,stackSize”参数啊2.线程的生命周期下面是对suspend()方法和stop()方法的原理解析小疑问: 上面画红线的地方所表达的意思是什么呢?解释: “守护线程”的作用就是为了服务“非守护线程”的,只要存在“非守护线程”,那么“守护线程”就不...原创 2019-03-07 20:45:35 · 440 阅读 · 0 评论 -
线程池和Executor框架
二.Executor框架Executor框架的结构Executor框架主要由3大部分组成:解释:在定义“被执行的任务”的时候,要实现Runable接口或Callable接口小疑问: 上面那个Executor框架图还是有些不理解,需要做笔记记录...原创 2019-03-07 21:30:56 · 520 阅读 · 0 评论 -
JUC包中原子类使用及其原理
下面我就简单地演示一下操作基本类型的原子类的一些方法可以看到只有一行代码,这其中有个很重要的东西就是unsafe,这个是sun.misc.Unsafe类型的实例,现在一定注意,这个Unsafe类在JUC包中被频繁使用到的,所以特别重要。呐呐呐,是不是多了几行代码,下面我就来解析一下这个方法...原创 2019-03-18 11:16:56 · 561 阅读 · 0 评论 -
AQS详解
AQS的介绍AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。AQS原理AQS:AbstractQuenedSynchronizer抽象的队列式同步器。是除了java自带的synchronized关键字之外的锁机制。AQS的核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作...原创 2019-03-25 20:14:48 · 696 阅读 · 0 评论 -
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。一、CountDownLatch 二、CyclicBarrier如果说想在所有线程写入操作完之后,进行额外的其他操作可以为CyclicBarrier提供Runnable参数:下面看...原创 2019-03-25 20:56:12 · 560 阅读 · 0 评论 -
多线程面试题
小疑问: 套接字可以用来进行客户端和服务端的通信(比如”自动聊天机器人“),最后上述第6种”信号singal“是怎么用的?原创 2019-03-07 14:55:12 · 1295 阅读 · 0 评论 -
并发队列讲解
1.并发队列在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列非阻塞,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。2.阻塞队列与非阻塞队(解释:非阻塞就是没有限制,如果队列里面没有元素了,这个时候还去队列里面取元素的话,就取出null值)阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获...原创 2018-10-11 16:34:51 · 751 阅读 · 0 评论 -
线程池
线程池的分类ThreadPoolExecutorJava是天生就支持并发的语言,支持并发意味着多线程,线程的频繁创建在高并发及大数据量是非常消耗资源的,因为java提供了线程池。在jdk1.5以前的版本中,线程池的使用是及其简陋的,但是在JDK1.5后,有了很大的改善。JDK1.5之后加入了java.util.concurrent包,java.util.concurrent包的加入给予开发人...原创 2018-10-11 18:53:07 · 527 阅读 · 0 评论 -
java锁的深度化
1.重入锁锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized(重量级) 和 ReentrantLock(轻量级)(解释:就是我们常说的lock锁)等等 ) 。这些已经写好提供的锁为我们开发提供了便利。重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。在JAVA环境下 ReentrantLock ...原创 2018-10-12 17:45:53 · 526 阅读 · 0 评论 -
Disruptor并发框架
互斥锁就是悲观锁(比如synchronized)等待更新这部分内容…原创 2018-10-13 15:23:12 · 435 阅读 · 2 评论 -
java内存模型
原创 2018-10-02 17:24:40 · 444 阅读 · 0 评论 -
多线程
1.线程与进程区别总结:进程是所有线程的集合,每一个线程是进程中的一条执行路径。2.为什么要用多线程?可以提高程序的执行效率3.多线程应用场景?答:主要能体现到多线程提高程序效率。举例: 迅雷多线程下载、数据库连接池、分批发送短信等。4.同步和异步的概念?同步就是从上往下执行,有顺序,异步就是建立一个新的执行路径而执行,各个线程之间互不影响,比如ajax就是异步加载,像验证码就是...原创 2018-10-08 13:29:15 · 500 阅读 · 0 评论 -
线程安全问题
1.什么是线程安全?为什么有线程安全问题?当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题。2.线程安全解决办法:问:如何解决多线程之间线程安全问题答:使用多线程之间同步synchronized或使用锁(lock)。问:为什么使用线程同步或使用锁能解决线程安全问题呢?答:将可能会发生数据冲突问题...原创 2018-10-10 17:23:29 · 817 阅读 · 0 评论 -
并发编程里面常见的概念
wait()与sleep()的区别,简单来说wait()会释放对象锁而sleep()不会释放对象锁。这些问题有很多的资料,不再赘述。 初看起来wait() 和 notify() 方法与suspend()和 resume() 方法对没有什么分别,但是事实上它们是截然不同的。区别的核心在于,前面叙述的suspend()及其它所有方法在线程阻塞时都不会释放占用的锁(如果占用了的话),而wait() 和 notify() 这一对方法则相反。 如果另外的一个线程调用了相同对象的notifyAll()方原创 2018-12-31 14:46:10 · 589 阅读 · 0 评论 -
线程池的4种拒绝策略
1.ThreadPoolExecutor类实现了ExecutorService接口和Executor接口,可以设置线程池corePoolSize,最大线程池大小,AliveTime,拒绝策略等。常用构造方法:ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,long keepAliveTime, TimeUnit unit,Blo...原创 2018-12-31 15:55:12 · 23346 阅读 · 3 评论 -
ThreadPoolExecutor线程池及线程扩展策略
一、概述1、ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务;2、Executors方法提供的线程服务,都是通过参数设置来实现不同的线程池机制。3、先来了解其线程池管理的机制,有助于正确使用,避免错误使用导致严重故障。同时可以根据自己的需求实现自己的线程池二、核心构造方法...原创 2019-01-01 21:11:26 · 633 阅读 · 0 评论 -
java高并发解决方案
不懂的地方请自觉搞明白原创 2018-09-26 10:06:23 · 620 阅读 · 0 评论 -
多线程之间的通讯
多线程之间如何实现通讯1.什么是多线程之间通讯?多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。画图演示2.多线程之间通讯需求需求:第一个线程写入(input)用户,另一个线程取读取(out)用户.实现读一个,写一个操作。代码实现基本实现共享资源源实体类class Res { public String userSex; public String us...原创 2018-10-11 10:43:59 · 572 阅读 · 0 评论