多线程
文章平均质量分 97
明天吃啥。
“偷懒的最好方法就是一次性做好”
展开
-
【多线程】线程池
说起池,我们就会联想到之前学过的字符串常量池,数据库连接池等,关于“池”还是很常见的,池的目的就是为了减少每次获取资源的消耗,提高对资源的利用率。线程池就是提前将线程准备好,创建线程不再是从系统中申请,而是直接从线程池中取,线程不用了也是还给线程池。原创 2024-08-02 20:56:57 · 833 阅读 · 0 评论 -
【多线程】阻塞队列
阻塞队列是一种特殊的队列,既然是队列,也就满足“先进先出”的原则。阻塞队列是一种线程安全的数据结构,并且具有以下特性:1. 当队列满的时候,继续入队列就会阻塞,直到有其他线程从队列中取走元素2. 当队列空的时候,继续出队列也会阻塞,直到有其他线程往队列中插入元素原创 2024-08-02 20:56:16 · 1046 阅读 · 0 评论 -
【多线程】单例模式
单例模式是一种经典的设计模式它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。单例模式主要用于控制对某些共享资源的访问,例如配置管理器、连接池、线程池、日志对象等。原创 2024-07-25 13:59:31 · 1185 阅读 · 1 评论 -
【多线程】wait()和notify()
在上一篇关于线程安全的问题中,我们提到过线程的调度是无序的,随机的,但很多时候我们都不喜欢随机的东西,很多时候都需要线程能有序的执行,此时就用到了我们今天要介绍的两个方法,wait()和notify()。相信大家都去银行的取款机取过钱,就算没有,也大致知道是个什么样的,进入取款机,然后锁门,然后插卡进行取钱。如下图:原创 2024-07-25 13:58:58 · 834 阅读 · 1 评论 -
【多线程】线程安全问题及解决方法
而load操作时间开销很大,远远高于cmp ,此时CPU有个大胆的操作,将load操作优化了,就导致只有第一次读取flag的值的时候t1线程会从主存中进行读取,之后则在本地内存进行读取,这就会导致当t2线程修改flag的值并同步到主存的时候,t1线程并没有读取到更新的值,这和我们上述提到过的Java内存模型对应,当我们给flag变量加上volatile关键字的时候问题就解决了,这是由于加了volatile关键字的变量,会指示JVM每次读取这个变量的时候都需要从主存中进行读取。原创 2024-07-23 14:18:18 · 1021 阅读 · 1 评论 -
【多线程】Thread类的用法
在上一篇进程和线程中,我们介绍了进程和线程的概念,今天我们来介绍一下在Java中如何进行多线程编程,此时就有人问了,哪为啥不是进行多进程编程呢,这是因为操作系统其实是提供了一组进行多进程编程的API,但JDK中并没有给我们Java程序员封装这些多进程的API,同时,在上一篇我们介绍进程和线程中介绍过,进程切换是开销比较大的操作,而线程切换的成本比较低。原创 2024-07-09 21:23:19 · 792 阅读 · 1 评论 -
【多线程】进程与线程
操作系统本质上是运行在计算机上的软件程序,对上,它负责给软件运行提供稳定的环境,对下,它要管理好各种硬件设备。一个运行起来的程序就是进程,而我们电脑中的.exe文件就是一个可执行的文件(程序),当双击这个.exe文件,这个程序跑起来就形成了一个进程。关于这个我们可以通过任务管理器查看,如下图:我们从上面两种图都可以观察到我们的计算机上运行着许许多多的进程,我们在最开始提到过,操作系统的一大功能就是进行进程的管理,那么它是如何对进程进行管理的呢?描述一个进程:使用结构体/类把一个进程有哪些信息描述出来。原创 2024-07-06 22:42:22 · 1126 阅读 · 1 评论