
并发编程
我的需求呢
何许浅碧深红色 自是花中第一流
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spring+注解+Redis 实现接口的幂等性
背景在一些业务场景中经常会出现一个请求还没执行完就有另一个相同的请求进入导致业务逻辑混乱的问题,对于这类问题可以使用分布式锁的手段根据业务的请求来判断是否相同来拦截,解决方案于是本人参考网上的内容写了一个分布式锁的注解方式拦截。具体流程如下:代码先创建一个注释import java.lang.annotation.*;import java.util.concurrent.TimeUnit;@Target({ElementType.METHOD}) // 作用类型为方法@Retenti原创 2020-10-28 13:00:05 · 297 阅读 · 0 评论 -
【Java多线程】多线程实现异步调用结果返回
前言在我们的业务中很可能会碰到需要执行一段时间的任务,并且如果同步的话就会造成一些无谓的等待。因此可以使用异步调用的方法,不阻塞当前其他任务的执行。小栗子首先我们先要创建一个线程池,可以根据自己的需求创建,什么IO密集型参数设置,CPU密集型参数的设置。这里我们仅仅想让10个任务一起跑。ExecutorService threadPool = new ThreadPoolExecutor( 10, 10,原创 2020-05-18 20:01:15 · 7174 阅读 · 2 评论 -
@Scheduled注解处理解决Java定时任务
在业务中,我们经常会碰到一些需要定时去完成的任务,例如定时的数据统计、定时发送邮件、定时获取消息等。Spring为我们提供了强大的@Scheduled注解注解注意点作用于方法、注解。 也就是说可以在方法上作用,或者在其他注解上注释,这样另一个注解就有了定时任务的功能。可以重复注释。当你描述不清需求的时候可以拆分成多个@Scheduled进行注释,但是注意当多个@Scheduled在同一时...原创 2020-04-28 21:02:21 · 811 阅读 · 0 评论 -
【Java多线程】Java 多个线程交替打印数字
两个线程交替打印数字/** * 两个线程顺序交替打印数字 */public class Test5 implements Runnable { int i = 0; @Override public void run() { synchronized (this){ while (i < 200) { ...原创 2020-03-17 14:50:28 · 1748 阅读 · 3 评论 -
【AQS 深入理解】 CountDownLatch核心全面分析
都说理解了AQS就理解了锁的机制 那我就一个一个方法来吧~~~这次讲讲juc里面的CountDownLatchCountDownLatch 结构其实CountDownLatch里面还真没那么几个属性方法,一个内部类Sync继承AQS 加上了6个方法组成。CountDownLatch 运行方式CountDownLatch的使用就像火箭发射,倒数到0就进行发射。上图的main为主线程...原创 2020-03-11 16:29:25 · 355 阅读 · 0 评论 -
【AQS 深入理解】 hasQueuedPredecessors() 理解
AQS hasQueuedPredecessors() 理解原创 2020-03-06 18:06:05 · 4382 阅读 · 10 评论 -
【Java多线程】 阻塞队列小结
阻塞队列说到队列,他有一个很显著的特点就是先进先出,由此利用这种特性,可以用来进行处理完成一些操作。阻塞队列就是其中之一下面就是java中定义的接口 * @since 1.5 * @author Doug Lea * @param <E> the type of elements held in this collection */public interface Blo...原创 2020-03-02 14:48:59 · 170 阅读 · 0 评论 -
【Java多线程】线程池ThreadPoolExecutor 原理分析
线程池ThreadPoolExecutor线程池的分析线程重用线程池的优点ThreadPoolExecutor概述参数重点讲解线程池的分析线程重用 在实际生产环境中,线程的数量必须得到控制,盲目的大量创建线程对系统性能是有伤害的。为了避免系统频繁的创建和销毁线程,我们可以让创建的线程进行复用。线程池就是为了实现线程的复用。在线程池中维护一定数量的线程,用来反复的执行提交的任务。 线程...原创 2019-12-11 15:18:34 · 179 阅读 · 0 评论 -
【Java 多线程】线程死锁条件及案例
java线程死锁(deadlock)是什么?多线程在带来高效的处理速度时还带来一系列的问题,死锁就是其中之一,死锁:就是两个即以上的线程因为某种关系造成双方都无法继续下去的原因,例如A需要B,B需要A例如:程序员去面试需要工作经验,但是只有面试了才能有工作经验就会陷入一种窘迫的场景又或者程序员在带薪上厕所没带纸,需要同事手里的纸但是同事得去厕所才能给他 并且厕所只能容纳一个人因此另一个同...原创 2019-11-15 17:09:44 · 233 阅读 · 0 评论 -
synchronize 的对象修改还能锁定吗?
synchronize 的对象修改还能锁定吗?今天在坐动车时候忽然想到一个奇怪的问题,如果synchronize锁定对象被修改,那么是否锁就失效下面分为两种情况。对象属性被修改代码很简单,主要是一个线程请求一个已经被锁住10秒的对象,如果获得锁就输出已经获得。public class User { private Integer age ; public Integer...原创 2019-10-17 12:25:35 · 412 阅读 · 0 评论 -
Java的List如何实现线程安全?
Java的List是我们平时很常用的集合,线程安全对于高并发的场景也十分的重要,那么List如何才能实现线程安全呢 ?加锁首先大家会想到加锁,例如下面的代码public class Synchronized{ private List<String> names = new LinkedList<>(); public synchroni...原创 2019-10-14 16:42:09 · 33622 阅读 · 5 评论 -
Java中final关键字分析
Final关键字最近研究了下final这个关键字,网上的总结也很多,自己看了许多的帖子和书稍微总结一下以供大家一起学习~修饰变量final对变量的修饰分为基本类型和引用类型,对基本类型的修饰表现为变量的不可修改,对引用类型的修饰表现为引用地址无法改变但是对象的内容可以修改。public class SubBird { private final int[] num = ne...原创 2019-10-14 10:59:10 · 307 阅读 · 0 评论 -
synchronize和volatile的总结
synchronize既保证原子性又保证可见性由于同时只能有一个线程能执行代码所以能具有原子性底层使用 monnitorenter monintorexit jvm指令实现原子性可见性 synchronizez在线程解锁前,必须把共享变量刷新到主内存,在线程加锁时把自己工作内存的共享变量的值清空重新获取可以重入,在获取锁之后不需要重新获取锁执行volatile只保证可见性底层...原创 2019-10-12 14:59:03 · 214 阅读 · 0 评论