操作系统
文章平均质量分 92
想跳上月球
学习、记录、分享
有问题请指正,欢迎骚扰
展开
-
【多线程】 九
本文主要介绍了java.util.concurrent包的几个常见类,包括可以创建线程的Callable接口、ReentrantLock可重入锁、Semaphore信号量以及CountDownLatch拆分任务的应用场景,还讨论了集合类的线程安全问题。原创 2023-10-08 19:36:00 · 34 阅读 · 0 评论 -
【多线程】 八
死锁的三种典型情况:1.一个线程,一把锁,但是是不可重入锁,该线程针对这个锁连续加锁两次,就会出现死锁;2.两个线程,两把锁,这两个线程先分别获取一把锁,然后再同时尝试获取对方的锁;3.N个线程M把锁针对第3种情况 N个线程M把锁 ,就有一个哲学家就餐问题的典型案例。原创 2023-10-08 18:52:45 · 38 阅读 · 0 评论 -
【多线程】 七
如果我们需要频繁的创建和销毁线程,此时创建销毁线程的成本,就不能忽视了。因此就可以使用线程池提前创建好一波线程,后续需要使用线程,就可以直接从池子里拿一个即可。本来,需要创建/销毁线程;现在,从池子里获取现成的线程,并且把线程归还到池子中;如果从系统创建,需要调用系统api,进一步的由操作系统内核完成线程的创建过程(内核给所有的进程提供服务)如果是从线程池这里获得线程,上述的内核中进行的操作,都是提前做好的,现在的取线程的过程,是纯粹的用户代码完成(纯用户态)原创 2023-10-06 21:57:47 · 38 阅读 · 0 评论 -
【多线程】 六
本文主要介绍了如何用循环队列实现一个阻塞队列来模拟一个生产者消费者模型,以及定时器Timer类的使用还有如何使用优先级队列来实现一个自己的定时器。原创 2023-09-25 20:50:30 · 31 阅读 · 0 评论 -
【多线程】 五
前面的【多线程】一二三四主要是多线程的基础,介绍了一些多线程的基本概念。从本文开始是多线程进阶内容,将会介绍四个典型案例,本文说到的是第一种模式:单例模式。原创 2023-09-24 00:15:24 · 47 阅读 · 0 评论 -
【多线程】 四
把volatile用来修饰一个变量之后,编译器就明白,这个变量是 易变的 ,就不会按上述方式,把读操作优化到读寄存器中,于是就能保证t1在循环过程中,始终都能读取内存中的数据;这个代码中有两个线程,t1线程和t2线程,我们想要实现的是:t2输入isQuit的值,如果不是0,那么停止线程t1的执行。虽然在t2中改变了isQuit的值,但是在另一个线程中,并没有重复读取isQuit的值,因此t1就无法感知到t2的修改;而没有感知到t2已经修改了t2的值,跳过从读内存的操作,导致了内存可见性问题的出现。原创 2023-09-20 13:57:16 · 47 阅读 · 0 评论 -
【多线程】 三
这两个方法针对的是不同的对象,因此不会产生锁竞争,进而也不会产生阻塞等待一系列操作,,也就依然会让两个线程按照并发的方式进行count++,依然存在线程安全问题;此时,两个方法中都给this对象加锁(同一对象),两个线程就会产生锁冲突,一个线程能加锁成功,另一个线程阻塞等待,count变量同一时刻只能被一个线程修改;由于前两个原因都是我们无法改变的,因此,解决该问题得从第三点入手,如果修改操作,能够按照原子的方式来完成,也不会有线程安全问题;和单线程不同,多线程下,代码的执行顺序,产生了更多变化;原创 2023-09-17 17:31:14 · 77 阅读 · 1 评论 -
【多线程】二
本文介绍了创建线程的七种方式,以及与线程有关的一些方法,包括前台线程/后台线程,终止线程和等待线程等;原创 2023-09-14 12:30:53 · 76 阅读 · 1 评论 -
【多线程】一
为什么要有多线程,原来不是已经有了多进程嘛?原创 2023-09-11 21:49:23 · 30 阅读 · 0 评论