多线程
文章平均质量分 80
多线程学习笔记
飞四海
这个作者很懒,什么都没留下…
展开
-
20.synchronized原理详解
在java中,最简单的同步方式就是利用 synchronized 关键字来修饰代码块或者修饰一个方法,那么这部分被保护的代码,在同一时刻就最多只有一个线程可以运行,而 synchronized 的背后正是利用锁实现的。那么?原创 2023-12-25 09:52:20 · 45 阅读 · 0 评论 -
19.悲观锁与乐观锁解析
悲观锁比较悲观,它认为如果不锁住这个资源,别的线程就会来争抢,就会造成数据结果错误,所以悲观锁为了确保结果的正确性,会在每次获取并修改数据时,都把数据锁住,让其他线程无法访问该数据,这样就可以确保数据内容万无一失。举个例子。原创 2023-11-22 15:14:05 · 103 阅读 · 0 评论 -
18.多线程中的锁有哪一些?
根据分类标准我们把锁分为以下 7 大类别,分别是:偏向锁/轻量级锁/重量级锁;可重入锁/非可重入锁;共享锁/独占锁;公平锁/非公平锁;悲观锁/乐观锁;自旋锁/非自旋锁;可中断锁/不可中断锁。以上基本是我们经常会遇到的一些锁。原创 2023-05-11 16:21:57 · 925 阅读 · 0 评论 -
17.Future 介绍与主要用法
Future 最主要的作用是原创 2023-03-17 15:45:55 · 2072 阅读 · 0 评论 -
16.线程池之线程复用原理与源码解析
线程池实现“线程复用”的原理原创 2023-03-13 15:21:14 · 254 阅读 · 0 评论 -
15.在使用线程池的时候怎么正确关闭线程池?
它可以安全地关闭一个线程池,调用 shutdown() 方法之后线程池并不是立刻就被关闭,因为这时线程池中可能还有很多任务正在被执行,或是任务队列中有大量正在等待被执行的任务,调用 shutdown() 方法后线程池会在执行完正在执行的任务和队列中等待的任务后才彻底关闭。,这不仅代表线程池已关闭,同时代表线程池中的所有任务都已经都执行完毕了,因为我们刚才说过,调用 shutdown 方法之后,线程池会继续执行里面未完成的任务,不仅包括线程正在执行的任务,还包括正在任务队列中等待的任务。原创 2023-03-13 14:54:05 · 1396 阅读 · 0 评论 -
14.线程数量怎么制定?
线程的平均工作时间所占比例越高,就需要越少的线程;线程的平均等待时间所占比例越高,就需要越多的线程;原创 2023-02-27 18:22:58 · 664 阅读 · 1 评论 -
13.使用自动创建线程池的风险,要自己创建为好
相比较而言,我们自己手动创建会更好,因为我们可以更加明确线程池的运行规则,不仅可以选择适合自己的线程数量,更可以在必要的时候拒绝新任务的提交,避免资源耗尽的风险。原创 2023-02-19 15:55:42 · 404 阅读 · 0 评论 -
12.常用线程池与线程拒绝策略汇总学习
多线程拒绝策略与线程池类梳理原创 2023-02-13 18:15:49 · 1127 阅读 · 0 评论 -
11.线程池使用方式
在没有线程池的时候,每发布一个任务就需要创建一个新的线程,这样在任务少时是没有问题的。如果有成千上万的任务呢?,并且每个线程还会占用一定的内存等资源,更重要的是我们创建如此多的线程也会给稳定性带来危害,因为每个系统中,可创建线程的数量是有一个上限的,不可能无限的创建。。但我们的任务确实非常多,如果都在主线程串行执行,那效率也太低。线程池就是来平衡线程与系统资源之间的关系。针对反复创建线程开销大的问题,线程池用一些固定的线程一直保持工作状态并反复执行任务。原创 2023-02-08 10:54:59 · 311 阅读 · 0 评论 -
10.多线程带来的性能问题
对于多线程而言,它不仅可能会带来线程安全问题,还有可能会带来性能问题,不是说使用多线程就多牛多牛了。我们在开发中让多个线程同时工作,加快程序运行速度,反而会带来了性能问题,因为单线程程序是独立工作的,不需要与其他线程进行交互,但多线程之间则需要调度以及合作,调度与合作就会带来性能开销从而产生性能问题。原创 2023-01-28 15:05:11 · 683 阅读 · 0 评论 -
9.使用wait/notify实现生产者消费者模式
在之前我们的生产消费模式 都是基于多线程去开发的,生产者消费者模式是程序设计中非常常见的一种设计模式,被广泛运用在解耦、消息队列等场景。但是最麻烦的就是需要平衡生产消费者,所以需要一个中介来进行调度,于是便诞生了生产者消费者模式。使用生产者消费者模式通常需要在两者之间增加一个阻塞队列作为媒介,有了媒介之后就相当于有了一个缓冲,平衡了两者的能力。所以我们要在合适的时机去阻塞或者唤醒我们的生产消费者,也就是阻塞的线程,那什么时候唤醒呢?原创 2023-01-28 14:30:04 · 234 阅读 · 0 评论 -
8.谈谈线程安全:活跃性问题(死锁、活锁、饥饿)
现在我们做开发,到哪都会被问到线程安全的问题,那今天就好好总结下线程安全。引用:那意思就是如果某个对象是线程安全的,那么对于使用者而言,在使用时就不需要考虑方法间的协调问题。活跃性问题就是程序始终得不到运行的最终结果,比如发生死锁会导致程序完全卡死,无法向下运行。死锁是指两个线程之间相互等待对方资源,但同时又互不相让,都想自己先执原创 2022-12-03 15:03:26 · 485 阅读 · 0 评论 -
7.使用多线程时,要注意哪些场景?经验之谈
多线程会出现问题的场景原创 2022-12-02 11:23:02 · 397 阅读 · 0 评论 -
6.终于了解volatile的原理和使用方法了
volatile 怎么使用原创 2022-12-01 15:42:04 · 578 阅读 · 0 评论 -
5.玩明白wait-notify-notifyAll方法
虚假唤醒”(spurious wakeup)的问题,线程可能在既没有被notify/notifyAll,也没有被中断或者超时的情况下被唤醒。虽然在实际生产中,虚假唤醒发生的概率很小,但是程序依然需要保证在发生虚假唤醒的时候的正确性,所以就需要采用while循环的结构。这样即便被虚假唤醒了,也会再次检查while里面的条件,如果不满足条件,就会继续wait,也就消除了虚假唤醒的风险。首先会造成线程不安全的情况。这个网站上有很多案例 可以自己去搜索。原创 2022-11-24 15:32:53 · 386 阅读 · 0 评论 -
4.线程的生命周期(6种状态转换)
java线程6个状态转换1. New(新创建)2. Runnable(可运行)3. Blocked(被阻塞)4. Waiting(等待)5. Timed Waiting(计时等待)6. Terminated(被终止)原创 2022-11-23 17:42:48 · 244 阅读 · 0 评论 -
3.Java中volatile 标记位的停止方法为什么不能用?
为什么 volatile 标记位的停止方法是错误的原创 2022-11-21 17:57:55 · 368 阅读 · 0 评论 -
2.Java怎么正确停止线程呢?
java怎么停止线程?原创 2022-11-18 17:36:21 · 657 阅读 · 0 评论 -
1.Java线程实现方式有哪几种?
其实透过现象看本质,打开封装后,会发现它们最终都是基于 Runnable 接口或继承 Thread 类实现的。但是仔细看看源码会发现,他们本质好像也是一样的。原创 2022-11-17 16:42:52 · 1190 阅读 · 0 评论