
java并发
文章平均质量分 69
WalkerShen
端正 静心 呼吸 下笔
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【java并发】CountDownLatch的实践应用
countDownlatch~原创 2022-06-22 10:44:36 · 431 阅读 · 0 评论 -
【java并发】java五种创建线程的方式【包含线程池】
方式一:继承Thread package 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 · 435 阅读 · 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 · 2895 阅读 · 1 评论 -
【java并发系列】java Executors和Executor学习
Executors 工具类 下面主要是Executors支持的生成线程池的方式,主要有下面这些 executors生成一些常用的线程池方法 4· (1)newSingleThreadExecutor 创建一个单线程的线程池。 这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。 如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。 此线程池保证所有任务的执行顺序按照任务的提交顺序执行。 (2)newFixedThreadPool 创建固定大小的线程池。 每次提交一个任务就创.原创 2022-03-22 18:15:44 · 830 阅读 · 0 评论 -
【java并发系列】java BlockingQueue学习
什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。 这两个附加的操作是: 在队列为空时,获取元素的线程会等待队列变为非空。 当队列满时,存储元素的线程会等待队列可用。 应用场景 阻塞队列常用于生产者和消费者的场景, 生产者是往队列里添加元素的线程, 消费者是从队列里拿元素的线程。 阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。 阻塞队列使用最经典的场景就是 socket 客户端数据的读取和解析,读取数据的线程不断将数据放入队列,然后解析线程不断从.原创 2022-03-22 17:28:56 · 470 阅读 · 1 评论 -
【java并发】java CopyOnWriteArrayList学习
参考:CopyOnWriteArrayList真的完全线程安全吗 CopyOnWriteArrayList 是什么? CopyOnWriteArrayList 是一个并发容器。有很多人称它是线程安全的,我认为这句话不严谨,缺少一个前提条件,那就是非复合场景下操作它是线程安全的。 CopyOnWriteArrayList(免锁容器)的好处之一是当多个迭代器同时遍历和修改这个列表时,不会抛出 ConcurrentModificationException。 在CopyOnWriteArrayList 中,写入原创 2022-03-22 16:27:47 · 238 阅读 · 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 · 150 阅读 · 0 评论 -
【java并发】java ReentrantReadWriteLock学习
ReadWriteLock 是什么 首先明确一下,不是说 ReentrantLock 不好,只是 ReentrantLock 某些时候有局限。 如果使用 ReentrantLock,可能本身是为了防止线程 A 在写数据、线程 B 在读数据造成的数据不一致, 但这样,如果线程 C 在读数据、线程 D 也在读数据,读数据是不会改变数据的,没有必要加锁,但是还是加锁了,降低了程序的性能。因为这个,才诞生了读写锁 ReadWriteLock。 ReadWriteLock 是一个读写锁接口,读写锁是用来提升并原创 2022-03-22 14:38:04 · 375 阅读 · 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 · 604 阅读 · 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 · 1786 阅读 · 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 · 302 阅读 · 0 评论