>

随笔分类 -  并发编程

摘要:一、项目现存问题描述 当前系统项目中,存在一些并发安全风险问题(虽然并发量较小)。特别是在处理审批状态修改和涉及金额数量的操作,由于缺乏有效的并发控制,可能会导致业务逻辑重复执行和数据不一致。例如 并发场景下,多个线程同时尝试更新同一笔交易状态或金额,这不仅会导致数据不一致,还可能引发更严重的相关业 阅读全文
posted @ 2025-02-28 16:54 字节悦动 阅读(234) 评论(0) 推荐(3) 编辑
摘要:1、了解与使用 ThreadPoolTaskExecutor是springboot提供的默认线程池 。也就是说如果没有自定义线程池,那么会自动装配这个默认的。 In the absence of an Executor bean in the context, Spring Boot auto-co 阅读全文
posted @ 2021-07-09 10:56 字节悦动 阅读(10070) 评论(1) 推荐(19) 编辑
摘要:一、为什么使用线程池 使用线程的时候直接就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 通过使用线程池可以达到这样的效果:空闲下来的线程 阅读全文
posted @ 2018-10-07 23:04 字节悦动 阅读(196) 评论(0) 推荐(0) 编辑
摘要:执行结果: main正在执行 Thread-0子线程正在执行 Thread-0子线程执行完毕 main执行test方法完毕 main执行完毕 阅读全文
posted @ 2018-09-21 11:25 字节悦动 阅读(169) 评论(0) 推荐(0) 编辑
摘要:在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。 在前面我们接触的队列都是非阻塞队列,比如 阅读全文
posted @ 2018-08-20 11:28 字节悦动 阅读(222) 评论(0) 推荐(0) 编辑
摘要:Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现 阅读全文
posted @ 2018-08-20 10:08 字节悦动 阅读(197) 评论(0) 推荐(0) 编辑
摘要:JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能。因为同步容器将所有对容器状态的访问都 串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了并发性,当多个线程竞争容器时,吞吐量严重降低。因此Java5.0开 始针对多线程并发访问设计,提供 阅读全文
posted @ 2018-08-15 16:52 字节悦动 阅读(201) 评论(0) 推荐(0) 编辑
摘要:在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 一、CountDownLatch用法 CountDownLatch类位于java.util.concur 阅读全文
posted @ 2018-08-15 10:59 字节悦动 阅读(157) 评论(0) 推荐(0) 编辑
摘要:为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列、Synchronizer(比如CountDownLatch)。今天我们就来讨论下同步容器。 一、为什么会出现同步容器? 在Java的集合容器框架中,主要有四大类别:List、Set、Queu 阅读全文
posted @ 2018-08-15 10:27 字节悦动 阅读(172) 评论(0) 推荐(0) 编辑
摘要:在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就 阅读全文
posted @ 2018-08-13 10:19 字节悦动 阅读(154) 评论(0) 推荐(0) 编辑
摘要:在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务。下面先讲述一下Java中的应用程序和进程相关的概念知识,然后再阐述如何创建线程以及如何创建进程。 一、Java中关于应用程序和进程相关的概念 在Java中,一个应用程序对应着一个JVM实例( 阅读全文
posted @ 2018-08-13 10:05 字节悦动 阅读(154) 评论(0) 推荐(0) 编辑
摘要:在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程。当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通使用的,需要在实践中不断积累。由于并发肯定涉及到多线程,因此在进入并发编程主题之前,我们先来了解一下进程和线程的由来,这对后面对并发编程的 阅读全文
posted @ 2018-08-12 17:06 字节悦动 阅读(124) 评论(0) 推荐(0) 编辑
摘要:在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。 也许有朋友会问,既然都可以通过synchronized来实现同步 阅读全文
posted @ 2018-08-12 16:41 字节悦动 阅读(141) 评论(0) 推荐(0) 编辑
摘要:虽然多线程编程极大地提高了效率,但是也会带来一定的隐患。比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据。今天我们就来一起讨论下线程安全问题,以及Java中提供了什么机制来解决线程安全问题。 一、什么时候会出现线程安全问题? 在单线程中不会出现线程安全问题,而 阅读全文
posted @ 2018-08-11 16:35 字节悦动 阅读(136) 评论(0) 推荐(0) 编辑
摘要:一、线程的状态 在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状态,这个将会有助于后面对Thread类中的方法的理解。 线程从创建到最终的消亡,要经历若干个状态。一般来说,线程包括以下这几个状态:创建(new)、就绪(runnable)、运行(running)、阻塞(block 阅读全文
posted @ 2018-08-08 23:38 字节悦动 阅读(160) 评论(0) 推荐(0) 编辑
摘要:volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于v 阅读全文
posted @ 2018-08-07 22:17 字节悦动 阅读(144) 评论(0) 推荐(0) 编辑
摘要:直接继承Thread和实现Runnable接口这两种创建线程的方式都有一个共同的缺陷:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提供了Callable和Future,通过它们可 阅读全文
posted @ 2018-08-03 10:50 字节悦动 阅读(118) 评论(0) 推荐(0) 编辑
摘要:除了控制资源的访问外,我们还可以通过增加资源来保证所有对象的线程安全。比如,让100个人填写个人信息表,如果只有一支笔,那么大家就得挨个填写,对于管理人员来说,必须保证大家不会去哄抢这仅存的一支笔,否则,谁也填不完。从另外一个角度出发,我们可以干脆就准备100支笔,人手一支,那么所有人就可以各自为营 阅读全文
posted @ 2018-08-02 20:02 字节悦动 阅读(238) 评论(0) 推荐(1) 编辑
摘要:一、问题由来 假设在一个订单系统中(以火车票订单系统为例),用户A,用户B都要预定从成都到北京的火车票,A、B在不同的售票窗口均同时查询到了某车厢卧铺中、下铺位有空位。用户A正在犹豫订中铺还是下铺,这时用户B果断订购了下铺。当用户A决定订下铺时,系统提示下铺已经被预订,请重新选择铺位。在这个系统场景 阅读全文
posted @ 2018-07-09 10:16 字节悦动 阅读(887) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示