首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java多线程-概念&创建启动&中断&守护线程&优先级&线程状态

今天开始就来总结一下java多线程的基础知识点,下面是本篇的主要内容 1.什么是线程以及多线程与进程的区别 2.多线程的创建与启动 3.中断线程和守护线程以及线程优先级 4.线程的状态转化关系 什么是线程以及多线程与进程的区别...中断线程和守护线程以及线程优先级 什么是中断线程? 我们先来看看中断线程是什么?...我们可以把中断理解为一个标识位的属性,它表示一个运行中的线程是否被其他线程进行了中断操作,而中断就好比其他线程对该线程打可个招呼,其他线程通过调用该线程的interrupt方法对其进行中断操作,当一个线程调用...在java线程中,通过一个整型的成员变量Priority来控制线程优先级,每一个线程有一个优先级,默认情况下,一个线程继承它父类的优先级。...如果有几个高优先级线程没有进入非活动状态,低优先级线程可能永远也不能执行。 每当调度器决定运行一个新线程时,首先会在具有高优先级线程中进行选择,尽管这样会使低优先级线程可能永远不会被执行到。

82630

线程中断

线程中断 线程中断线程运行过程中被其他线程给打断了,它与 stop 最大的区别是:stop 是由系统强制终止线程,而线程中断则是给目标线程发送一个中断信号 如果目标线程没有接收线程中断的信号并结束线程...* 线程中断失败, 因为目标线程收到中断信号并没有做出处理 */ public class T01_ThreadInterrupt_Failed { static int i = 10;...package com.starry.codeview.threads.P05_ThreadInterrupt; /** * 线程中断成功, 目标线程收到中断信号做出了处理 */ public...package com.starry.codeview.threads.P05_ThreadInterrupt; /** * 线程中断失败,Sleep遇到线程中断catch到异常会清除掉中断标记,...package com.starry.codeview.threads.P05_ThreadInterrupt; /** * 线程中断失败,Sleep遇到线程中断catch到异常会清除掉中断标记,

1.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

中断和软中断_软中断和硬中断优先级

linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间 就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3) 中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断 除外。...__softirq_pending) 唤醒ksoftirqd内核线程处理软中断。...在ksoftirqd内核线程中 3. 在那些显示检查和执行待处理的软中断的代码中,如网络子系统中 而不管是用什么方法唤起,软中断都要在do_softirq()中执行。...当大量软中断出现的时候,内核会唤醒一组内核线程来处理。 这些线程优先级最低(nice值为19),这能避免它们跟其它重要的任务抢夺资源。

2.5K40

Linux 线程调度与优先级

放在队列尾保证了所有具有相同优先级的RR任务的调度公平 Linux线程优先级设置 首先,可以通过以下两个函数来获得线程可以设置的最高和最低优先级,函数中的策略即上述三种策略的宏定义:  int...,是不是能够保证,高优先级线程,就可以保证先运行。...下面的这个测试程序,创建了三个线程,默认创建的线程的调度策略是SCHED_OTHER,其余的两个线程的调度策略设置成SCHED_RR。我的Linux的内核版本是2.6.31。...在《深入理解Linux内核》中的第七章进程调度中,是这样描诉的,Linux采取单凭经验的方法,即选择尽可能长、同时能保持良好相应时间的一个时间片。...由于线程1的优先级大于线程2的优先级,所以,在线程1以先于线程2运行,不过,这里线程2有一部分代码还是先于线程1运行了。

5.6K20

线程中断

中断同时也是我们实现并发的基础,中断一个线程的执行,调度另一个线程的执行。 中断源 如果按照中断事件类型来分,大致上有以下几种类型的中断事件类型: 机器故障中断事件。...中断操作主要分为两种方式,一种叫『抢占式中断』,一种叫『主动式中断』。前者就是在发生中断时,强制剥夺线程的 CPU,后者是在正在执行的线程中断位上标记一下,具体什么时候中断线程自己来决定。...,该线程启动后打印 50000 个数字,但是我们的主线程中又会去中断线程。...线程对于中断的响应 RUNNABLE 状态为 RUNNABLE 的线程是拥有 CPU 正在运行的线程,我们的 interrupt 方法仅仅会设置一下该线程中断标志位,不会做任何其他的操作,关于你是否响应此中断...NEW/TERMINATE 对于这两个状态的线程进行中断请求,目标线程什么也不会做,就连中断标志位也不会被设置,因为 Java 认为,一个还未启动的线程和一个已经结束的线程,对于他们的中断是毫无意义的。

1.7K30

线程中断

中断是对线程的一个指示,它应该停止正在做的事情并做其他事情。由程序员决定线程如何响应中断,但是线程终止是很常见的。这是本节课要强调的用法。...线程通过在要被中断线程对象上调用interrupt来发送中断。为了让中断机制正常工作,被中断线程必须支持自己的中断。 Supporting Interruption 线程如何支持自己的中断?...如果线程很长时间没有调用抛出InterruptedException的方法,该怎么办?然后,它必须定期调用Thread.interrupted,如果已经接收到中断,该函数返回true。...return; } } 在这个简单的示例中,代码只是测试中断并在收到中断后退出线程。...当线程通过调用静态方法thread .interrupted来检查中断时,中断状态将被清除。一个线程使用非静态的isInterrupted方法来查询另一个线程中断状态,它不会改变中断状态标志。

1.2K20

Java线程中断

Thread.interrupt 的作用其实也不是中断线程,而是 通知线程应该中断了。 具体到底中断还是继续运行,应该由被通知的线程自己处理。...② 如果线程处于正常活动状态,那么会将该线程中断标志设置为 true,仅此而已。被设置中断标志的线程将继续正常运行,不受影响。...interrupt() 并不能真正的中断线程,需要被调用的线程自己进行配合才行。...也就是说,一个线程如果有被中断的需求,那么就可以这样做: ① 在正常运行任务时,经常检查本线程中断标志位,如果被设置了中断标志就自行停止线程。...如果一个线程被设置中断标志后,选择结束线程那么自然不存在下次的问题,而如果一个线程被设置中断标识后,进行了一些处理后选择继续进行任务,而且这个任务也是需要被中断的,那么当然需要清除标志位了。

1.1K20

NVIC 中断优先级管理详解

1.NVIC(内嵌向量中断控制器) STM32系列总共有84个中断,其中我用的STM32F103系列的板子也有60个中断,可想而知STM32一定有一个中断的管理机制来管理这么多中断,使能中断并且配置相关中断优先级...,这就是NVIC的工作 优先级高的中断可以打断优先级低的中断,这样一个中断执行的时候被另外中断给打断,这个中断执行完再执行上一个中断,形成中断之间的嵌套,或许这就是NVIC 名字为内嵌向量中断控制器来源...NVIC中对于每个中断需要设置 抢占优先级 和 响应优先级(又称子优先级),很明显多个中断会先比较 抢占优先级,抢占优先级相同的比较响应优先级,这里值得注意的是 高抢占优先级能够打断低抢占优先级的,但是相同抢占优先级的高响应优先级不能打断低响应优先级...中断分组表 中断优先级分组 分配结果 抢占优先级取值 响应优先级取值 0 0位抢占优先级,4位响应优先级 0~0 0~15 1 1位抢占优先级,3位响应优先级 0~1 0~7 2 2位抢占优先级,2位响应优先级...0~3 0~3 3 3位抢占优先级,1位响应优先级 0~7 0~1 4 4位抢占优先级,0位响应优先级 0~15 0~0 提示:我们最好一个程序就用就只指定一个中断分组,否则容易混肴!

1.7K20

Java多线程三:线程中断

线程运行,肯定就会有线程中断,在Java语言中,线程中断是一种协作机制,通过对线程设置中断标记,告知对应的线程,根据中断标记来决定是否需要中断当前线程。...线程中断涉及的几个方法 interrupt() 设置线程中断标志,所在线程调用该方法之后,正常情况下会设置一个线程中断标志位 interrupt = true....但是我们可以根据线程中断标志,来判断当前线程是否可以继续运行。 对线程稍微改造一下,让他在线程中断为true的时候退出线程运行。...JDK源码中的解释:测试当前线程是否被中断。该方法清除线程中断状态。...总结 线程中断对于我们学习多线程还是有很大的帮助,线程中断本质上不会强制将线程停止,如果需要强制将线程终止,可以调用Thread 中的stop()方法,但是不建议这么用,该方法已经过时,学习了线程中断

44230

线程优先级

线程优先级线程调度用来判定何时每个线程允许运行。理论上,优先级高的线程优先级低的线程获得更多的CPU时间。...实际上,线程获得的CPU时间通常由包括优先级在内的多个因素决定(例如,一个实行多任务处理的操作系统如何更有效的利用CPU时间)。 一个优先级高的线程自然比优先级低的线程优先。...举例来说,当低优先级线程正在运行,而一个高优先级线程被恢复(例如从沉睡中或等待I/O中),它将抢占低优先级线程所使用的CPU。 理论上,等优先级线程有同等的权利使用CPU。但你必须小心了。...线程优先级线程调度用来判定何时每个线程允许运行。理论上,优先级高的线程优先级低的线程获得更多的CPU时间。...举例来说,当低优先级线程正在运行,而一个高优先级线程被恢复(例如从沉睡中或等待I/O中),它将抢占低优先级线程所使用的CPU。 理论上,等优先级线程有同等的权利使用CPU。但你必须小心了。

98530

【STM32】NVIC中断优先级管理(中断向量表)

NVIC的核心功能是中断优先级分组、中断优先级的配置、读中断请求标志、清除中断请求标志、使能中断、清除中断等,它控制着STM32中断向量表中中断号为0-59的60个中断!!...STM32中断优先级分组 中断优先级分组寄存器 这60个中断,怎么管理呢?这就涉及到STM32的中断分组。...介绍一下抢占优先级、响应优先级的区别: 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的; 抢占优先级相同的中断,高响应优先级不可以打断低响应优先级中断; 抢占优先级相同的中断,当两个中断同时发生的情况下...,哪个响应优先级高,哪个先执行; 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行; 除此之外有两点需要注意: 打断的情况只会与抢占优先级有关, 和响应优先级无关!...中断优先级设置寄存器 分组设置好了之后,怎么设置单个中断的抢占优先级和响应优先级

1.8K40

线程优先级

线程优先级线程在同时争抢cpu资源的时候,如果没有设置优先级执行顺序是比较乱的。如果设置了优先级则当线程碰撞在一起的时候,优先级高的就会先执行。 不设置优先级代码示例: ?...设置优先级代码示例: ? 线程优先级只有在线程碰撞在一起的时候才能看出效果,需要在执行次数较多的情况下就能明显看出来。执行次数少比较难看出效果,因为线程碰撞到一起的几率比较小。...notify方法: notify方法是用来激活进入等待状态的线程,此方法只能激活最开始进入等待状态的那个线程。...notifyAll方法: notifyAll方法也是用来激活进入等待状态的线程,不过此方法能够激活所有进入等待状态的线程。...线程应用例题之买馒头: 想要买馒头首先需要消费者、店铺、还有做馒头的厨子,所以我们需要三个类,其中厨子和消费者是线程,店铺则是对象。

90110

线程中断标志位

theme: fancy 线程结束只有两种情况:1.没有捕获到定义的异常终止 2.run方法执行完毕 interrupt 该方法可以用来请求中断线程。...当一个线程调用该方法时,会设置该线程中断标识位,线程执行的过程中会去检查这个标志位从而抛出异常。...目的 中断线程是为了可以响应中断的请求,让捕获到这个异常之后去做对应的事情。比如某个线程需要将其他线程挂起就可以设置这个标志位,其他线程去捕获异常做处理。...如何响应异常 1、在检测到异常之后再catch语句中再次设置标志位,因为抛出异常前会重置中断标志位,所以为了其他线程能够检测到当前线程是由于中断而做的处理就需要周期catch语句中再次设置标志位。...这样其他线程检测的时候就会发现这个线程响应了中断 2.通过throw抛出异常,调用者在调用的时候进行处理。

59920

浅聊线程中断

其实在学习AQS的时候我们也说过线程中断,AQS中acquire方法会忽略线程中断。现在我们来了解一下什么叫线程中断” ?...首先我们需要知道线程的thread.interrupt()方法是中断线程,但是线程中断并不是说明,线程被中止了,只是给线程标识一个中断状态,中断的结果线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序本身...终止(TERMINATED):表示该线程已经执行完毕。 为什么说这六种状态呢?因为线程每一个状态对于是否响应中断是不一样的。线程在初始阶段和中止阶段是不会响应中断的,也就是说这两个状态是屏蔽中断的。...我个人觉得有如下两点,首先即使isInterrupted判断线程中断标识为true,线程仍然执行,也就是中断标识不影响线程的执行(不做额外控制的情况),然后就是在线程初始和终止阶段中断无效,但是运行状态是有效的...如果你捕获到中断异常,说明当前线程已经被中断,不需要继续保持中断位 就中断就会有判断是否中断,isInterrupted方法就是判断线程是否中断的方法,其底层是一个native方法,ClearInterrupted

78510

混乱的Linux内核实时线程优先级

背景 Linux会把进程分为普通进程和实时进程,普通进程采用CFS之类调度算法,而实时进程则是采用SCHED_FIFO或SCHED_RR。...内核线程优先级 Linux内核会将大量(并且在不断增加中)工作放置在内核线程中,这些线程是在内核地址空间中运行的特殊进程。...因此也会把这些内核线程放到SCHED_FIFO中去。 那么问题来了,某个内核线程的实时优先级到底该设为多少呢?...所以一般来说,内核开发人员也就是看心情直接随便选一个实时优先级。 现在的一些内核实时线程如下: ?...通过只留下这三个接口可以避免开发者们再不停地去随机选取内核线程优先级,因为这样本来毫无意义,当然如果需要的话系统管理员还是可以按需调整不同进/线程优先级

3.5K10

Java线程(四):线程中断线程让步、线程睡眠、线程合并

另外一点,了解传统线程的工作原理,使我们在使用并发包时更加得心应手。 线程中断        线程中断涉及到三个方法,如下: void interrupt()           中断线程。...其实interrupt()方法并不是中断线程的执行,而是为调用该方法的线程对象打上一个标记,设置其中断状态为true,通过isInterrupted()方法可以得到这个线程状态,我们将上面的程序做一个小改动...另外,Thread.interrupted()方法是一个静态方法,它是判断当前线程中断状态,需要注意的是,线程中断状态会由该方法清除。...换句话说,如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外)。...线程优先级 java.lang.Thread public static final int MAX_PRIORITY 10 public static final int MIN_PRIORITY 1

1.5K00

线程中断方法详解interrupt

线程中断方法详解interrupt由于stop中断线程方法过于暴力,就像是突然你正在开发,突然停电一样于是衍生出中断方法interrupt简介线程中断并不会使线程立即退出,而是给线程发送一个通知,告知目标线程...至于目标线程接收到通知之后如何处理,则完全由目标线程自己决定Thread提供了3个与线程中断有关的方法,这3个方法容易混淆,大家注意下:public void interrupt() //中断线程public...boolean isInterrupted() //判断线程是否被中断public static boolean interrupted() //判断线程是否被中断,并清除当前中断状态例子public...thread1"); thread1.start(); TimeUnit.SECONDS.sleep(1); thread1.interrupt();}调用interrupt()方法之后,线程的...注意:sleep方法由于中断而抛出异常之后,线程中断标志会被清除(置为false),所以在异常中需要执行this.interrupt()方法,将中断标志位置为true

11500

Linux中断 - IDT

[toc] 如何设置IDT IDT 中断描述符表定义 中断描述符表简单来说说是定义了发生中断/异常时,CPU按这张表中定义的行为来处理对应的中断/异常。...中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应的中断描述符,再根据中断描述符记录的信息来作权限判断,运行级别转换,最终调用相应的中断处理程序; 这里涉及到Linux...pre-cpu的中断栈,还是使用IST的中断栈; type表示所中断是何种类型,目前有以下四种: enum { GATE_INTERRUPT = 0xE, //中断门 GATE_TRAP...传统系统调用相关 IDT 的设置 Linux系统启动过程中内核压解后最终都调用到start_kernel, 在这里会调用trap_init, 然后又会调用idt_setup_traps: void...硬件中断相关IDT的初始化也是在Linux启动时完成,在start_kernel中通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int

6.5K10
领券