随笔分类 -  多线程

CyclicBarrier(循环屏障):协调多个线程同步执行某个操作
摘要:一、介绍 CyclicBarrier也叫同步屏障,在JDK1.5被引入的一个同步辅助类,在API中是这么介绍的: 允许一组线程全部等待彼此达到共同屏障点的同步辅助。 循环阻塞在涉及固定大小的线程方的程序中很有用,这 些线程必须偶尔等待彼此。 屏障被称为循环,因为它可以在等待的线程被释放之后重新使用。 阅读全文
posted @ 2023-01-16 09:12 周文豪 阅读(217) 评论(0) 推荐(0) 编辑
控制线程运行的类CountDownLatch:一个或者多个线程,等待其他多个线程完成某件事情之后才能执行
摘要:一、介绍 CountDownLatch是一个计数的闭锁,作用与CyclicBarrier有点儿相似。 在 API中是这样描述的: 用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待 阅读全文
posted @ 2023-01-16 09:12 周文豪 阅读(362) 评论(0) 推荐(0) 编辑
Volatile详解
摘要:通过前面内容我们了解了synchronized,虽然JVM对它做了很多优化,但是它还是一个重量级的锁。而接下来要介绍的volatile则是轻量级的synchronized。 如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。 Ja 阅读全文
posted @ 2022-02-07 21:05 周文豪 阅读(151) 评论(0) 推荐(0) 编辑
多线程之锁优化
摘要:synchronized是重量级锁,效率不高。 但在jdk 1.6中对synchronize的实现进行了各种优化,使得它显得不是那么重了。jdk1.6对锁的实现引入了大量的优化,如自旋锁、适应性自旋锁、锁消除、锁粗化、偏向锁、轻量级锁等技术来减少锁操作的开销。 锁主要存在四种状态,依次是:无锁状态、 阅读全文
posted @ 2022-02-07 18:16 周文豪 阅读(87) 评论(0) 推荐(0) 编辑
内存可见性以及synchronized实现可见性和Volatile实现可见性
摘要:一、内存可见性 1、内存可见性介绍 可见性: 一个线程对共享变量值的修改,能够及时的被其他线程看到 共享变量: 如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量 线程 A 与线程 B 之间如要通信的话,必须要经历下面 2 个步骤: (1)、首先,线程 A 把本地内存 阅读全文
posted @ 2022-02-07 17:30 周文豪 阅读(460) 评论(0) 推荐(0) 编辑
JVM内存结构、Java对象模型和Java内存模型
摘要:JVM内存结构、Java对象模型和Java内存模型,这就是三个截然不同的概念,而这三个概念很容易混淆。这里详细区别一下 一、JVM内存结构(5个部分) 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。 阅读全文
posted @ 2022-02-07 17:03 周文豪 阅读(344) 评论(0) 推荐(0) 编辑
多线程之线程优先级
摘要:优先级priority:当线程需要竞争CPU资源时,优先级高的能分配更多的CPU资源。 现今操作系统基本采用分时的形式调度运行的线程,线程分配得到时间片的多少决定了线程使用处理器资源的多少,也对应了线程优先级这个概念。 分时调度:所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时 阅读全文
posted @ 2022-02-07 15:55 周文豪 阅读(215) 评论(0) 推荐(0) 编辑
多线程之线程停止
摘要:结束线程有以下三种方法: (1)设置退出标志,使线程正常退出。 (2)使用interrupt()方法中断线程。 (3)使用stop方法强行终止线程(不推荐使用Thread.stop, 这种终止线程运行的方法已经被废弃,使用它们是极端不安全的!) 一、使用退出标志 一般run()方法执行完,线程就会正 阅读全文
posted @ 2022-02-07 15:40 周文豪 阅读(203) 评论(0) 推荐(0) 编辑
多线程之守护线程
摘要:Java中有两种线程,一种是用户线程,另一种是守护线程。 1、用户线程 用户线程是指用户自定义创建的线程,主线程停止,用户线程不会停止。 public class Demo4Daemon { public static void main(String[] args) { Thread thread 阅读全文
posted @ 2022-01-08 17:19 周文豪 阅读(158) 评论(0) 推荐(0) 编辑
多线程之join方法
摘要:join作用是让其他线程变为等待,我先执行。thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程(先执行指定的线程,再执行当前的线程)。比如在线程B(如主线程)中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。 public cla 阅读全文
posted @ 2022-01-05 21:37 周文豪 阅读(1223) 评论(0) 推荐(0) 编辑
多线程、JUC线程池、spring中通过@EnableAsync和@Async实现多线程
摘要:一个采用了多线程技术的应用程序可以更好地利用系统资源。其主要优势在于充分利用了CPU的空闲时间片,可以用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。 一、多线程 1、多线程的创建 创建线程方式一:继承Thread类 public class 阅读全文
posted @ 2021-04-11 15:51 周文豪 阅读(467) 评论(0) 推荐(0) 编辑