java并发
文章平均质量分 69
WalkerShen
端正 静心 呼吸 下笔
展开
-
【java并发】CountDownLatch的实践应用
countDownlatch~原创 2022-06-22 10:44:36 · 386 阅读 · 0 评论 -
【java并发】java五种创建线程的方式【包含线程池】
方式一:继承Threadpackage createThread.thread;//1、集成Thread类public class MyThread extends Thread{ //2、重写run方法 @Override public void run() { //Thread.currentThread().getName() 这里打印的结果是当前线程的名称 System.out.println(Thread.currentThread原创 2022-02-22 15:34:24 · 408 阅读 · 0 评论 -
【java并发系列】Controller是线程安全吗_ 安全方式如何
controller是线程不安全的,因为controller使用的是单例模式,不同的线程会对数据进行共享,导致数据混乱,没有实现我们想要的结果,除非定义的是常量,那就没有关系.因为设计成单例模式的话,就不需要处理太多的gc,性能就可能得到提高测试案例package com.walker.springbootdemo.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframe原创 2022-03-20 23:35:40 · 2845 阅读 · 1 评论 -
【java并发系列】java Executors和Executor学习
Executors 工具类下面主要是Executors支持的生成线程池的方式,主要有下面这些executors生成一些常用的线程池方法 4·(1)newSingleThreadExecutor创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。(2)newFixedThreadPool创建固定大小的线程池。每次提交一个任务就创.原创 2022-03-22 18:15:44 · 804 阅读 · 0 评论 -
【java并发系列】java BlockingQueue学习
什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。应用场景阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。阻塞队列使用最经典的场景就是 socket 客户端数据的读取和解析,读取数据的线程不断将数据放入队列,然后解析线程不断从.原创 2022-03-22 17:28:56 · 447 阅读 · 1 评论 -
【java并发】java CopyOnWriteArrayList学习
参考:CopyOnWriteArrayList真的完全线程安全吗CopyOnWriteArrayList 是什么?CopyOnWriteArrayList 是一个并发容器。有很多人称它是线程安全的,我认为这句话不严谨,缺少一个前提条件,那就是非复合场景下操作它是线程安全的。CopyOnWriteArrayList(免锁容器)的好处之一是当多个迭代器同时遍历和修改这个列表时,不会抛出 ConcurrentModificationException。在CopyOnWriteArrayList 中,写入原创 2022-03-22 16:27:47 · 212 阅读 · 0 评论 -
【java并发】java Condition学习
参考:Java并发之Condition简介Condition是基于Lock类存在的,也是用于线程的通信,但是是更加细粒度的Condition的优势是支持多路等待,就是我可以定义多个Condition,每个condition控制线程的一条执行通路。传统方式只能是一路等待。之后可以使用condition的await()和signal()方法进行线程的通信使用案例package lockTest.condition;import java.util.concurrent.locks.Conditi原创 2022-03-22 15:19:05 · 133 阅读 · 0 评论 -
【java并发】java ReentrantReadWriteLock学习
ReadWriteLock 是什么首先明确一下,不是说 ReentrantLock 不好,只是 ReentrantLock 某些时候有局限。如果使用 ReentrantLock,可能本身是为了防止线程 A 在写数据、线程 B 在读数据造成的数据不一致,但这样,如果线程 C 在读数据、线程 D 也在读数据,读数据是不会改变数据的,没有必要加锁,但是还是加锁了,降低了程序的性能。因为这个,才诞生了读写锁 ReadWriteLock。ReadWriteLock 是一个读写锁接口,读写锁是用来提升并原创 2022-03-22 14:38:04 · 356 阅读 · 0 评论 -
【java并发系列】死锁编码及定位分析?
步骤1、编写一个死锁类package deadLock;/** * @Author: WalkerShen * @DATE: 2022/3/15 * @Description: 死锁 **/public class DeadLockDemo { /** * 模拟场景: * 线程0 获取资源1 休眠 获取资源2 * 线程1 获取资源2 休眠 获取资源1 */ //定义两个资源 //资源1 private final s原创 2022-03-22 11:57:59 · 586 阅读 · 0 评论 -
【java并发系列】Lock实现公平锁和非公平锁
简介lock不同于synchronized,是可以实现公平锁和非公平锁的public ReentrantLock(boolean fair)当fair为true的时候,是公平锁false的时候为非公平锁如果是公平锁,则会按照队列的顺序进行执行如果是非公平锁,则会按优先级高的先执行案例:公平锁package lockTest;import java.util.concurrent.locks.ReentrantLock;public class FairLockTest {原创 2022-03-22 11:15:16 · 1721 阅读 · 0 评论 -
【java并发系列】java并发之手写自旋锁
自旋锁(spinLock)是指尝试获取锁的线程不会阻塞,而是采用循环的方式获取锁好处:减少上下文切换的消耗坏处:循环会消耗CPU案例package synchronizedTest.spinLock;import java.util.concurrent.atomic.AtomicReference;/*** author:walker* time: 2022/3/21* description: 自定义自旋锁*/public class SpinLockTest {原创 2022-03-21 23:33:16 · 285 阅读 · 0 评论