首页 > 其他分享 >线程有哪些常用的调度方法?

线程有哪些常用的调度方法?

时间:2023-09-25 19:06:42浏览次数:41  
标签:调用 哪些 中断 调度 线程 共享 方法 wait


线程有哪些常用的调度方法?_共享变量

一、线程等待

在Object类中有一些函数可以用于线程的等待:

1.1 wait()

当一个线程A调用一个共享变量wait()方法时,线程A会被阻塞挂起,发生以下情况才会返回:

(1)线程A调用了共享对象的notify()或者notifyAll()方法。

(2)其它线程调用了线程A的interrupt()方法,线程A抛出InterruptedException异常返回。

1.2 wait(long timeout)

这个方法比wait方法多了个超时参数,它的不同之处在于,如果线程A调用共享对象的wait(long timeout)方法后,没有在指定的timeout ms时间内被其它线程唤醒,那么这个方法还是会因为超时而返回。

1.3 wait(long timeout,int nanos)

其内部调用的是wait(long timeout)函数。

1.4 join()

Thread类也提供了一个方法用于等待的方法:

如果一个线程A执行了thread.join()语句,其含义是:当前线程A等待thread线程终止之后才从thread.join()返回。

二、唤醒线程

2.1 notify()

一个线程A调用共享对象的notify()方法后,会唤醒一个在这个共享变量上调用wait系列方法后被挂起的线程。一个共享变量上可能会有多个线程在等待,具体唤醒哪个等待线程都是随机的。

2.2 notifyAll()

不同于在共享变量上调用notifyAll()函数会被唤醒被阻塞到该共享变量上的一个线程,notifyAll()方法会唤醒所有在该共享变量上由于调用wait系列方法而被挂起的线程。

三、线程休眠

3.1 sleep()

Thread类中的静态方法,当一个执行中的线程A调用了Thread的sleep方法后,线程A会暂时让出指定时间的执行权,但是线程A所拥有的监视器资源,比如锁还是持有不让出的。

指定睡眠时间到了之后该函数会正常返回,接着参与CPU调度,获取到CPU资源后就可以接着继续运行。

四、让出优先权

yeild():Thread类中的静态方法,当一个线程调用yield方法时,实际上是在暗示线程调度器当前线程请求让出自己的CPU执行权,但是线程调度器可以选择是否接受或者忽略该请求。

五、线程中断

Java 中的线程中断是一种线程间的协作模式,通过设置线程的中断标志并不能直接终止该线程的执行,而是被中断的线程根据中断状态自行处理。

5.1 void interrupt()

中断线程,例如:当线程A运行时,线程B可以调用线程的interrupt()方法来设置线程的中断标志为true并立即返回。

设置标志仅仅是设置标志,线程A并没有被中断,会继续往下执行。

5.2 boolean isInterrupted()

检测当前线程是否被中断。

5.3 boolean interrupted()

检测当前线程是否被中断,与isInterrupted不同的是,该方法如果发现当前线程被中断,则会清除中断标志。

标签:调用,哪些,中断,调度,线程,共享,方法,wait
From: https://blog.51cto.com/u_16269508/7597967

相关文章

  • HarmonyOS使用多线程并发能力开发
     一、多线程并发概述1、简介并发模型是用来实现不同应用场景中并发任务的编程模型,常见的并发模型分为基于内存共享的并发模型和基于消息通信的并发模型。Actor并发模型作为基于消息通信并发模型的典型代表,不需要开发者去面对锁带来的一系列复杂偶发的问题,同时并发度也相对......
  • JDK10优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析
    一、前言上一期讲了JDK9的一些新特性,需要回顾的朋友们可以看下这篇文章《JDK9优化了哪些功能以及新增了哪些特性功能》这一期讲一讲JDK10的一些新功能二、新增特性以下是JDK10的一些新增或变化的特性:1.局部变量类型推断(LocalVariableTypeInference):引入了var关键字,允许在局部变......
  • JDK9优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析
    一、前言我们现在大部分公司都在使用jdk8,jdk8的功能主要是增加了lambda流式处理,还有优化了线程安全的时间LocalDate,这里我就先不赘述了,那jdk9相对jdk8优化了哪些功能,以及新增了哪些特性功能呢,下面一一给大家讲述一下二、新增特性以下是一些主要的变化和新增特性:1.模块化系统(Jig......
  • 进程和线程之间区别
    进程和线程是计算机科学中重要的概念,用于描述程序执行的不同方式和组织形式。进程(Process):进程是程序的一次执行过程,是计算机系统分配资源的基本单位。每个进程拥有独立的内存空间,包括代码、数据、堆栈等,使得进程间的数据不共享,相互隔离。进程可以包含多个线程,共享该进程的......
  • 高压放大器在互感器中的应用有哪些
    高压放大器是一种常用的电子元件,广泛应用于各种领域。在互感器中,高压放大器可以起到信号放大的作用,提高信号的强度和稳定性。下面西安安泰将详细介绍高压放大器在互感器中的应用。一、互感器是什么互感器是一种电气元件,主要用于测量和变换高电压和高电流信号。它通过在......
  • 【技术研究】线程和进程
    有一句概念“进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。”分上下句去理解他吧,首先贴一张图所看到是一个进程的内存空间,分为一些栈区,堆区,一些资源区等等。“进程是操作系统资源分配的基本单位”,进程包含一个程序的执行实例,说的具体点就是他有......
  • Java中的线程池的线程数量如何确定?
    可能很多人都看到过一个线程数设置的理论:CPU密集型的程序-核心数+1I/O密集型的程序-核心数*2不会吧,不会吧,真的有人按照这个理论规划线程数?线程数和CPU利用率的小测试抛开一些操作系统,计算机原理不谈,说一个基本的理论(不用纠结是否严谨,只为好理解):一个CPU核心,单......
  • 企业sdwan组网要求:企业使用SD-WAN组网时有哪些要求?
    在当今信息时代,企业对于网络的稳定性和高效性要求越来越高。SD-WAN(软件定义广域网)作为一种新兴的网络技术,为企业提供了更加灵活、可靠和安全的广域网解决方案。在组建企业SD-WAN网络时,有一些关键要求需要考虑。高可用性:企业SD-WAN网络需要保证高可用性,确保业务的持续性和可靠性。......
  • 线程一些常用功能总结
    c++11通常单例模式如下:template<typenameT>classSingleton{protected:Singleton()=default;Singleton(constSingleton<T>&)=delete;Singleton&operator=(constSingleton<T>&st)=delete;staticstd::shared_ptr&......
  • 第三方测评机构做软件测试的对企业有哪些收益?专业第三方测评机构收费?
    ​ 权威第三方软件测试报告第三方测评机构做软件测试的对企业有很多收益。主要有以下几点:节约人力成本:对于很多软件企业而言,由于软件的开发上线需要聘请专业的软件测试人员,但是一旦项目不饱和或者结束,这样会提高人力成本。选择第三方软件测评机构进行软件测评的话,就能完美......