![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
多线程
文章平均质量分 67
多线程编程处理demo
李哈ha
多努力,就有多幸运
展开
-
Springboot 多线程实现事务控制
springboot 多线程处理事务原创 2023-04-28 15:10:37 · 1696 阅读 · 0 评论 -
多线程使用不当,造成OOM
本次代码摘自某公众号造成OOM代码模拟public static void test() throws InterruptedException, ExecutionException { Executor executor = Executors.newFixedThreadPool(3); CompletionService<String> service = new ExecutorCompletionService<>(executor);转载 2022-04-28 08:41:55 · 505 阅读 · 0 评论 -
ReentrantLock原理分析
ReentrantLock:表示重入锁,它是唯一一个实现了 Lock 接口的类。重入锁指的是线程在获得锁之后,再次获取该锁不需要阻塞,而是直接关联一次计数器增加重入次数ReentrantLock 重入锁 重入锁,表示支持重新进入的锁,也就是说,如果当前线程 t1 通过调用 lock 方法获取了锁之后,再次调用 lock,是不会再阻塞去获取锁的,直接增加重试次数就行了。synchronized 和 ReentrantLock 都是可重入锁。很多同学不理解为什么锁会存在重入的特性,那是因为对于同步原创 2021-10-29 23:18:46 · 329 阅读 · 0 评论 -
整理收集几种多线程分段处理list集合的方法
方法一来源:https://blog.csdn.net/jenny8080/article/details/import java.util.ArrayList;import java.util.List;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent原创 2021-06-25 16:17:41 · 1378 阅读 · 0 评论 -
多线程使用forkJoin进行任务拆分
什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+。。+10000,可以分割成10个子任务,每个子任务分别对1000个数进行求和,最终汇总这10个子任务的结原创 2021-06-23 17:36:43 · 796 阅读 · 0 评论 -
线程池的使用
先创建一个线程池的配置,让 Spring Boot 加载,用来定义如何创建一个ThreadPoolTaskExecutor,要使用@Configuration和@EnableAsync这两个注解,表示这是个配置类,并且是线程池的配置类@Configuration@EnableAsyncpublic class ExecutorConfig { private static final Logger logger = LoggerFactory.getLogger(ExecutorConfig转载 2021-06-10 10:02:28 · 185 阅读 · 0 评论 -
synchronized锁的升级原理是什么?
锁的级别从低到高:无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁锁分级别原因:没有优化以前,sychronized是重量级锁(悲观锁),使用 wait 和 notify、notifyAll 来切换线程状态非常消耗系统资源;线程的挂起和唤醒间隔很短暂,这样很浪费资源,影响性能。所以 JVM 对 sychronized 关键字进行了优化,把锁分为 无锁、偏向锁、轻量级锁、重量级锁 状态。无锁:没有对资源进行锁定,所有的线程都能访问并修改同一个资源,但同时只有一个线程能修改成功,其他转载 2021-01-10 13:48:50 · 271 阅读 · 0 评论 -
start()和run()的区别
本方法通过实现runnable接口来实现多线程,刚开始被run()和start()搞糊涂了,后来看了很多博客,稍有感悟。所以写一下自己的理解。start()方法让一个线程进入就绪队列等待分配cpu,分到cpu后才调用实现的run()方法。若不使用start()直接在main方法中直接使用run()方法, 比如下面程序的前两种情况,因为没有开辟新的线程,所以当前线程是main线程,而第三种情况,开辟了一个新线程且线程名我们设置为了“新线程”,在cpu执行新线程时会调用run()方法。package jav原创 2021-01-07 16:40:17 · 911 阅读 · 1 评论 -
深入理解Java多线程与并发编程
一、课程目标多线程三大特性 Java内存模型 Volatile ThreadLoca 线程池二、线程三大特性多线程有三大特性,原子性、可见性、有序性2.1 什么是原子性即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。一个很经典的例子就是银行账户转账问题:比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。这2个操作必须要具备原子性才能保证不出现一些意外的问题。我们操作数据原创 2021-01-07 16:08:35 · 127 阅读 · 2 评论 -
多线程交替打印奇偶数
/*** * 要求:两个线程交替打印从1到100的数字。 */public class PrintSD { //定义打印的方法 public synchronized void print(String str,int num){ notify(); System.out.println(str+num); try { if(100 != num){ wait();原创 2021-01-07 15:11:48 · 182 阅读 · 0 评论