![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
多线程
文章平均质量分 79
操作系统的多线程专栏
孤独寂寞看星河
这个作者很懒,什么都没留下…
展开
-
什么是线程?线程概念及方法详细讲解
对于 CPU 的 ⼀个核⽽⾔,某个时刻,只能执⾏⼀个线程,⽽ CPU 的在多个线程间切换速度相对我们的感觉 要快,看上去就是在同⼀时刻运⾏。:是指⼀个内存中运⾏的应⽤程序,每个进程都有⼀个独⽴的内存空间,⼀个应⽤程序可以同时运⾏多个进程;:线程是进程中的⼀个执⾏单元,负责当前进程中程序的执⾏,⼀个进程中⾄少有⼀个线程。优先让优先级⾼的线程使⽤ CPU,如果线程的优先级相同,那么会随机选择⼀个(线程随机性), Java使⽤的为抢占式调度。简⽽⾔之:⼀个程序运⾏后⾄少有⼀个进程,⼀个进程中可以包含多个线程。原创 2023-07-09 00:09:54 · 153 阅读 · 1 评论 -
Thread 类的基本用法
System.out.println("线程t1正在运行");try {});t1.start();//在主线程里可以随时通过flag变量的取值,来操作t线程是否结束自定义变量这种方式,不能及时响应尤其是在sleep休眠时间比较长的时候。原创 2023-07-08 23:47:50 · 50 阅读 · 1 评论 -
Java 线程的状态
线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。4. 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断),等不到就死等。1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。原创 2023-07-10 00:18:26 · 106 阅读 · 1 评论 -
进程与线程之间的区别及联系
1、进程:进程是一个具有独立功能的程序关于某个数据集合的以此运行活动。是系统进行资源分配和调度的独立单位,也是基本的执行单元。是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动。进程结构特征: 由程序、数据和进程控制块三部分组成。具有 独立性、并发性、异步性和动态性的特点。第一,进程是一个实体。原创 2023-06-25 15:44:22 · 121 阅读 · 0 评论 -
线程安全问题的原因和解决方案
我们的预期是,当t2修改了flag的值之后,使flag不再为0,此时跳出循环,线程t1结束。这里我们也发现,说是保证原子性,不是让这里的三个操作一次执行完成,也不是这三步操作过程中不进行调度,而是让其他想操作的线程阻塞等待了。根据比较结果,来进行下一步的操作。总的来说,就是wait和notify规定了t1和t2线程的执行顺序,因此也就使t1和t2的执行有了顺序,解决了抢占式执行,随机调度。我们要注意的是,虽然我们的wait是阻塞在了synchronized代码块里了,但是实际上,这里的阻塞是释放了锁的。原创 2023-07-11 00:12:59 · 499 阅读 · 0 评论 -
多线程——死锁详解
死锁是指两个或两个以上的进程在执⾏过程中,由于竞争资源或者由于彼此通信⽽造成的⼀种阻塞的现象,若⽆外⼒作⽤,它们都将⽆法推进下去。(也就是两个线程拥有锁的情况下,⼜在尝试获取对⽅锁,从⽽造成程序⼀直阻塞的情况。原创 2023-08-30 15:35:57 · 959 阅读 · 0 评论 -
多线程知识点简单总结
本质是让当前sleep线程,暂时不参与CPU的调度执行(把这个线程PCB放到了一个阻塞队列中),等到sleep时间到了,操作系统会把这个PCB拿回到就绪队列中。1)一个线程,一把锁,连续加锁两次,如果锁是不可重入锁,就会死锁,幸运的是,synchronized是可重入锁,这种情况不会产生死锁。2)两个线程,两把锁,线程1获取锁A,线程2获取锁B,此时线程1在尝试获取锁B,线程2再尝试获取锁A。加锁,核心是把一组不是原子的操作,变成了原子操作,这是解决线程安全问题的核心手段。原创 2023-07-14 15:38:13 · 36 阅读 · 1 评论 -
多线程练习题
【代码】多线程练习题。原创 2023-07-10 00:56:00 · 65 阅读 · 1 评论 -
单例模式:懒汉模式和饿汉模式
(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。问:怎么保证实例唯一的?1.static 这个操作,是让当前instance属性是类属性。原创 2023-07-13 02:06:12 · 111 阅读 · 1 评论 -
Java多线程之阻塞队列介绍
这里解释一下“解耦”:“耦”就是我们通常所说的“高内聚,低耦合”的耦合,写代码时,要追求两个模块间的关联性小,,不会因为一个模块发生的变化很大影响另一个模块,这就是低耦合。消息队列,也是特殊的队列,相当于在阻塞队列的基础上,加了个“消息的类型”,按照指定类别进行先进先出。阻塞队列的一个典型应用场景就是“生产者消费者模型”,这是一种非常典型的开发模型。生产者消费者模型,能给我们的程序带来两个非常重要的好处!阻塞队列能是一种线程安全的数据结构,阻塞队列是一种特殊的队列,继续入队列就会阻塞,继续出队列也会阻塞,原创 2023-07-14 17:49:47 · 226 阅读 · 1 评论