
java并发编程
文章平均质量分 81
java多线程并发从入门到放弃
FLGB
这个作者很懒,什么都没留下…
展开
-
java并发中的同步器
是 Java 并发包中的同步器之一,用于实现一组线程在达到一个共同点之前等待彼此,并在达到共同点后继续执行。是 Java 并发包中的同步器之一,用于实现一种等待机制,允许一个或多个线程等待其他线程完成一组操作后再继续执行。当许可证数量为零时,线程需要等待,直到其他线程释放许可证。在上述示例中,我们创建了一个 CyclicBarrier 实例,初始化等待的线程数量为 3,并设置了栅栏动作。然后创建多个线程,每个线程模拟执行任务后等待其他线程达到栅栏点,当所有线程都达到栅栏点时,栅栏动作会被执行。原创 2023-08-08 19:05:24 · 588 阅读 · 0 评论 -
java并发ForkJoinPool
框架是 Java 并发库中用于实现分治任务并行处理的工具。它基于 “工作窃取”(work-stealing)算法,可以将一个大任务拆分成多个小任务,并利用多线程进行并行处理。() 方法中,我们将任务拆分成两个子任务,并使用 fork() 和 join() 方法进行处理。在上述示例中,我们创建了一个。,用于计算斐波那契数列。提交任务并获取结果。原创 2023-08-08 18:24:50 · 218 阅读 · 0 评论 -
java并发中批量任务的同步和管理
自定义线程池@Slf4j//机器核数0L,(1000),@Overridereturn t;ExecutorCompletionServiceExample使用自定义线程池// 提交一些任务i原创 2023-08-08 16:42:58 · 722 阅读 · 0 评论 -
锁(一)synchronized的基本原理
synchronized有三种方式来加锁,不同的修饰类型,代表锁的控制粒度:Synchronized到底帮我们做了什么,为什么能够解决原子性呢?在没有加锁之前,多个线程去调用incr()方法时,没有任何限制,都是可以同时拿到这个i的值进行++ 操作,但是当加了Synchronized锁之后,线程A和B就由并行执行变成了串行执行。Synchronized是如何实现锁的,以及锁的信息是存储在哪里? 就拿上面分析的图来说,线程A抢到锁了,线程B怎么知道当前锁被抢占了,这个地方一定会有一个标记来实现,而且这个原创 2022-12-07 18:36:01 · 206 阅读 · 0 评论 -
java多线程基础篇(三)多线程并发问题的根因
原子性 Synchronized, AtomicXXX、Lock、可见性 Synchronized, volatile有序性 Synchronized,volatile在下面的案例中,演示了两个线程分别去去调用demo.incr 方法来对i 这个变量进行叠加,预期结果应该是20000,但是实际结果却是小于等于20000的值。运行结果每次都不同产生问题的原因这个就是典型的线程安全问题中原子性问题的体现。那什么是原子性呢?在上面这段代码中,count++是属于Java高级语言中的编程指令,而这些指令最终原创 2022-12-07 17:01:42 · 173 阅读 · 0 评论 -
java多线程基础篇(二)java线程常见问题Thread Dump日志分析
CPU占用率很高,响应很慢CPU占用率不高,但响应很慢线程出现死锁的情况有的时候我们会发现CPU占用率不高,系统日志也看不出问题,那么这种情况下,我们需要去看一下运行中的线程有没有异常通过jps 命令,查看java进程的pid2、jstack命令通过`jstack 查看线程日志如果存在死锁情况,Thread Dump日志里面肯定会给出Found one Java-level deadlock:信息。只要找到这个信息就可以立马定位到问题并且去解决。CPU占用率很高,但响应很慢有的时候我们会发现原创 2022-12-07 15:57:03 · 940 阅读 · 0 评论 -
java多线程基础篇(一)java线程的状态
从线程的start方法,到操作系统运行一个线程,实际上底层做了什么?OS调度算法有很多,比如先来先服务调度算法(FIFO)、最短优先(就是对短作业的优先调度)、时 间片轮转调度等。jps命令运行main方法,点击类ThreadStatus右键点击->Open in->Terminal 打开终端输入jpsjstack命令找到ThreadStatus的pid 15492,输入jstack 15492 显示上面四个线程运行的状态3、java中线程的所有状态通过上面这段代码可以看到,线程在运行过程原创 2022-12-07 11:22:35 · 116 阅读 · 0 评论 -
线程池异步时如何传递Thread上下文变量
这些问题追根究底都是ThreadLocal惹得祸。由于ThreadLocal只能保存当前线程的信息,不能实现父子线程的继承。很多人想到了InheritableThreadLocal,确实InheritableThreadLocal能够实现父子线程间传递本地变量,但是涉及到线程复用的时候就不一定能够实现父子线程间传递了,因为在线程在线程池中的存在不是每次使用都会进行创建,InheritableThreadlocal是在线程初始化时intertableThreadLocals=true才会进行拷贝传递。所以若本原创 2022-12-05 17:41:21 · 724 阅读 · 0 评论