
多线程与高并发的那些事
文章平均质量分 92
主要介绍Java多线程基础,Thread类和核心API的使用,以及锁和锁机制的见解等
比奇堡的天没有云
不会画图的程序员不是一个好作家
展开
-
【Java|多线程与高并发】死锁以及哲学家吃饭问题
死锁(Deadlock)是多线程编程中的一个常见问题,指的是两个或多个线程相互等待对方释放资源,导致程序无法继续执行的状态。在一种典型的死锁情况中,有两个或多个线程,每个线程都在持有一个资源的同时试图获得另一个线程持有的资源。当两个线程都在等待对方释放资源时,它们将永远无法继续执行,产生了死锁。System . out . println("t1获取locker1");try {System . out . println("t1获取locker2");} } });原创 2023-07-09 21:04:35 · 300 阅读 · 0 评论 -
【Java|多线程与高并发】JUC中常用的类和接口
JUC是Java并发编程中的一个重要模块,全称为`Java Util Concurrent`(Java并发工具包),它提供了一组用于多线程编程的工具类和框架,帮助开发者更方便地编写线程安全的并发代码。原创 2023-07-01 16:54:36 · 1418 阅读 · 36 评论 -
【Java|多线程与高并发】CAS以及ABA问题
CAS(Compare and Swap,“比较和交换”)是一种并发编程中常用的原子操作,用于解决多线程环境下的数据竞争和并发访问问题。CAS操作包含三个操作数:内存位置(通常是一个共享变量)、预期值和新值。读取内存位置的当前值。比较当前值与预期值是否相等。如果相等,则将内存位置的值更新为新值。如果不相等,则说明有其他线程已经修改了内存位置的值,CAS操作失败。CAS操作是由一条CPU指令,原子的完成的,是线程安全的且效率很高实现原子类实现自旋锁。原创 2023-06-30 11:18:16 · 375 阅读 · 4 评论 -
【Java|多线程与高并发】线程池详解
Java线程池是一种用于管理和重用线程的机制,它可以在需要执行任务时,从线程池中获取线程,执行任务,然后将线程放回池中,以便后续使用。线程池可以有效地管理线程的数量,提高程序的性能和资源利用率。为什么从线程池里面取线程比直接创建线程快呢?创建线程是要在操作系统内核中完成的,涉及"用户态"到"内核态"切换操作. 这个切换是有一定开销的. 而线程池取线程是纯的用户态实现.原创 2023-06-27 09:07:08 · 1268 阅读 · 10 评论 -
【Java|多线程与高并发】定时器(Timer)详解
在Java中,定时器Timer类是用于执行定时任务的工具类。它允许你安排一个任务在未来的某个时间点执行,或者以固定的时间间隔重复执行。在服务器开发中,客户端向服务器发送请求,然后等待服务器响应. 但服务器什么时候返回响应,并不确定. 但也不能让客户端一直等下去, 如果一直死等,就没有意义了. 因此通常客户端会通过定时器设置一个"等待的最长时间".原创 2023-06-25 18:43:12 · 8778 阅读 · 6 评论 -
【Java|多线程与高并发】阻塞队列以及生产者-消费者模型
阻塞队列(BlockingQueue)常用于多线程编程中,可以实现线程之间的同步和协作。它可以用来解决生产者-消费者问题,其中生产者线程将元素插入队列,消费者线程从队列中获取元素,它们之间通过阻塞队列进行协调。阻塞队列的使用可以简化多线程编程的复杂性,避免手动实现线程间的同步和协作逻辑,提高代码的可读性和可维护性。基于阻塞队列的生产者-消费者模型也要重点掌握.。阻塞队列作为生产者和消费者之间的缓冲区,提供线程安全的插入和获取操作,并在队列为空或队列已满时进行阻塞,从而实现线程间的同步。原创 2023-06-25 13:49:31 · 1784 阅读 · 8 评论 -
【Java|多线程与高并发】设计模式-单例模式(饿汉式,懒汉式和静态内部类)
设计模式是一种在软件开发中常用的解决复杂问题的方法论。它提供了一套经过验证的解决方案,用于解决特定类型问题的设计和实现。设计模式可以帮助开发人员提高代码的可重用性、可维护性和可扩展性。设计模式有很多,本文主要介绍单例模式.本文主要介绍了饿汉式,懒汉式和静态内部类三种实现单例模式的方式,其中 懒汉式单例 很重要,要着重理解双重if的含义.需要注意的是,以上方式都可以在多线程环境下保证单例的正确创建,但在特殊情况下,如使用反射或序列化/反序列化等机制,仍然可能破坏单例的唯一性。原创 2023-06-24 11:32:25 · 1155 阅读 · 25 评论 -
【Java|多线程与高并发】wait和notify方法详解
在Java多线程环境中,线程之间是抢占式执行的,线程的调度是随机的.这就很难受了. 在很多情况下我们希望线程以我们想要的顺序来执行. 这就需要wait和notify这两个方法wait和notify方法用于实现线程间的协作和通信.wait方法使线程进入等待状态,notify方法唤醒一个等待线程,notifyAll方法唤醒所有等待线程。通过上述三个方法,可以使线程按照特定的顺序执行或者等待某个条件满足后再执行。希望这篇文章能帮到你!专栏:《从零开始的Java学习之旅》在不断更新中,欢迎订阅!原创 2023-06-22 22:32:18 · 1645 阅读 · 21 评论 -
【Java|多线程与高并发】volatile关键字和内存可见性问题
和volatile都是Java多线程中很重要的关键字,但它们的作用和使用场景有所不同。synchronized关键字可以保证同一时刻只有一个线程可以访问被synchronized关键字保护的代码块,从而避免多个线程对共享资源的并发访问导致的数据不一致问题。关于关键字更详细的介绍,可以参考我之前写的这篇文章线程安全问题以及synchronized使用实例volatile用于保证变量在多个线程之间的可见性和有序性。本文主要介绍valatite关键字在介绍volatile关键字之前,原创 2023-06-11 18:58:19 · 1307 阅读 · 5 评论 -
【Java|多线程与高并发】线程安全问题以及synchronized使用实例
Java多线程环境下,多个线程同时访问共享资源时可能出现的数据竞争和不一致的情况。线程安全一直都是一个令人头疼的问题.为了解决这个问题,Java为我们提供了很多方式.synchronized关键字、ReentrantLock类等。使用线程安全的数据结构,例如ConcurrentHashMap、ConcurrentLinkedQueue等,避免共享资源使用volatile关键字保证内存可见性等方法。本文主要介绍synchronized关键字。原创 2023-06-09 10:53:19 · 1668 阅读 · 30 评论 -
【Java|多线程与高并发】线程的中断的两种方法
线程中断是指在一个线程执行的过程中,强制终止该线程的执行。虽说是中断,但本质上是让run方法快点执行完,而不是run方法执行到一半,强制结束.本文主要介绍线程中断的两种方法while(!flag) {System . out . println("线程执行中!");try {} } System . out . println("线程执行完了!");});try {} System . out . println("设置标志位,让线程执行结束");原创 2023-06-07 15:21:48 · 874 阅读 · 7 评论 -
【Java|多线程与高并发】Thread 常见的方法总结
本文主要介绍Thread类常见的方法方法描述getId()获取线程的唯一数字标识getName()获取线程的名字getState()获取线程的状态获取线程的优先级isDaemon()判断线程是否是守护线程设置线程是否是守护线程isAlive()判断内核中线程对象是否存活判断线程是否被中断返回代码段正在被哪个线程调用以上就是一些Thread类常见的方法,但Thread类中的方法远不止这些,还有一些更加重要的方法.欲知后事如何,且听下回分解!希望这篇文章能帮到你!原创 2023-06-03 16:22:52 · 1060 阅读 · 32 评论 -
【Java|多线程与高并发】详解start()方法和run()方法的区别
Java并发编程中 start()方法和run()方法的区别 以及run()的一些误区原创 2023-02-16 09:39:05 · 3151 阅读 · 5 评论 -
【Java|多线程与高并发】进程与线程的区别与联系
进程的定义:进程是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说CPU(寄存器),IO,内存,网络资源等。但这些定义十分抽象,可以打开任务管理器来查看进程操作系统中的一个exe程序就可以认为是进程线程的定义:线程是指进程中的一个执行流程,一个进程中可以运行多个线程。线程可以理解为进程执行中的一些子任务,这些线程各自执行一些任务,才构成了一个完整的exe程序(进程).因此先有进程,后有线程,进程中可以创建多个线程,至少有一个线程,但不能没有线程。原创 2023-02-14 09:00:00 · 370 阅读 · 0 评论 -
【Java|多线程与高并发】 使用Thread 类创建线程的5种方法&&如何查看程序中的线程
使用Thread类创建线程的5中方法 以及 使用打开jconsole.exe来查看程序中的线程原创 2023-02-13 14:43:38 · 1722 阅读 · 7 评论 -
【Java|多线程与多并发】PCB和进程调度的基本过程
进程是正在运行的程序的实例(an instance of a computer program that is being executed)进程(process)也叫任务(task)。如果想看电脑的进程,可以按 ctrl + alt + delete 调出任务管理器。进程是重要的”软件资源“,由操作系统内核来负责管理,这里的管理就是描述+组织描述:使用C语言的结构体来描述进程,这里的结构体也叫PCB(进程控制块/进程管理块)组织:使用一个双向链表来把多个进程串在一起。原创 2022-11-21 10:34:50 · 1102 阅读 · 22 评论