返回顶部
首页 > 资讯 > 精选 >Java中线程的基本方法使用技巧
  • 716
分享到

Java中线程的基本方法使用技巧

java线程使用 2023-05-31 03:05:30 716人浏览 薄情痞子
摘要

java中线程的基本方法的熟练使用是精通多线程编程的必经之路,线程相关的基本方法有wait,notify,notifyAll,sleep,join,yield等,本文浅要的介绍一下它们的使用方式。线程的状态图java将操作系统中的就绪和运行

java中线程的基本方法的熟练使用是精通多线程编程的必经之路,线程相关的基本方法有wait,notify,notifyAll,sleep,join,yield等,本文浅要的介绍一下它们的使用方式。

线程的状态图

Java中线程的基本方法使用技巧

java将操作系统中的就绪和运行两种状态统称为可运行状态,java中线程的状态可以认为有以上六种。

wait

调用该方法的线程进入WAITING状态,只有等待另外线程的通知或被中断才会返回,需要注意的是调用wait()方法后,会释放对象的

因此,wait方法一般用在同步方法或同步代码块中。

sleep

sleep导致当前线程休眠,与wait方法不同的是sleep不会释放当前占有的锁,sleep(long)会导致线程进入TIMED-WATING状态,而wait()方法会导致当前线程进入WATING状态

yield

yield会使当前线程让出CPU执行时间片,与其他线程一起重新竞争CPU时间片。一般情况下,优先级高的线程有更大的可能性成功竞争得到CPU时间片,但这又不是绝对的,有的操作系统对线程优先级并不敏感。

interrupt

中断一个线程,其本意是给这个线程一个通知信号,会影响这个线程内部的一个中断标识位。这个线程本身并不会因此而改变状态(如阻塞,终止等)。

调用interrupt()方法并不会中断一个正在运行的线程。也就是说处于Running状态的线程并不会因为被中断而被终止,仅仅改变了内部维护的中断标识位而已。

若调用sleep()而使线程处于TIMED-WATING状态,这时调用interrupt()方法,会抛出InterruptedException,从而使线程提前结束TIMED-WATING状态。

许多声明抛出InterruptedException的方法(如Thread.sleep(long mills方法)),抛出异常前,都会清除中断标识位,所以抛出异常后,调用isInterrupted()方法将会返回false。

中断状态是线程固有的一个标识位,可以通过此标识位安全的终止线程。比如,你想终止一个线程thread的时候,可以调用thread.interrupt()方法,在线程的run方法内部可以根据thread.isInterrupted()的值来优雅的终止线程。当然,你可以在线程内部自己维护一个boolean变量来控制线程的运行和终止。

现在,我们看一下源码里这个方法是怎么说明的。

 public void interrupt() { //检查当前线程对this线程的安全权限,如果不允许修改,会抛出异常 if (this != Thread.currentThread())  checkAccess();  //加锁同步 synchronized (blockerLock) {  Interruptible b = blocker;  if (b != null) {  interrupt0();  // Just to set the interrupt flag  b.interrupt(this);  return;  } } interrupt0(); //设置标识位,本地方法 }

--结束END--

本文标题: Java中线程的基本方法使用技巧

本文链接: https://lsjlt.com/news/223318.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中线程的基本方法使用技巧
    java中线程的基本方法的熟练使用是精通多线程编程的必经之路,线程相关的基本方法有wait,notify,notifyAll,sleep,join,yield等,本文浅要的介绍一下它们的使用方式。线程的状态图java将操作系统中的就绪和运行...
    99+
    2023-05-31
    java 线程 使用
  • java中多线程与线程池的基本使用方法
    目录前言继承Thread 实现Runnale接口Callable线程池常见的4种线程池。总结前言 在java中,如果每个请求到达就创建一个新线程,开销是相当大的。在实际使用中,服务器...
    99+
    2024-04-02
  • Java线程同步:实现多线程协作的方法与技巧
    在Java中,多线程编程是非常常见的,但是在多线程编程中,线程之间的同步是一个非常关键的问题。同步是指多个线程在执行过程中,能够协调和互相配合,以达到正确的执行结果。否则,会出现数据不一致、死锁等问题,影响程序的正确性和性能。 本文将介绍...
    99+
    2023-11-09
    同步 numy 日志
  • JAVA多线程中join()方法的使用方法
    虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正在运行多个线程时,join()到底是暂停了哪些线程,大部分博客...
    99+
    2024-04-02
  • Java 8 Time Api 使用方法技巧
    目录1.概述2. 旧的时间API(java8之前)的问题3.使用LocalDate,LocalTime和LocalDateTime3.1.使用LocalDate3.2.使用Local...
    99+
    2024-04-02
  • Python中多线程的创建及基本调用方法
    1. 多线程的作用 简而言之,多线程是并行处理相互独立的子任务,从而大幅度提高整个任务的效率。 2. Python中的多线程相关模块和方法 Python中提供几个用于多线程编程的模块,包括thread,th...
    99+
    2022-06-04
    多线程 方法 Python
  • 创建线程的三种基本方法
    这篇文章主要讲解了“创建线程的三种基本方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“创建线程的三种基本方法”吧!挺基础的知识,一开始不是很愿意写,毕竟这...
    99+
    2024-04-02
  • Android线程的优先级设置方法技巧
    对于Android平台上的线程优先级设置来说可以处理很多并发线程的阻塞问题,比如很多无关紧要的线程会占用大量的CPU时间,虽然通过了MultiThread来解决慢速I/O但是合...
    99+
    2022-06-06
    方法 技巧 android线程 优先级 Android
  • JAVA基础:线程池的使用
    目录 1.概述 2.线程池的优势​​​​​​​ 2.1.线程池为什么使用自定义方式? 2.2.封装的线程池工具类有什么好处? 3.线程池的七大参数 3.线程池的创建 3.1. 固定数量的线程池 3.2. 带缓存的线程池 3.3. 执⾏定时任...
    99+
    2023-09-08
    java jvm 开发语言 多线程 线程池
  • 聊聊github使用的基本的步骤和技巧
    GitHub是全球最大的开源社区,拥有丰富的资源和项目。对于程序员来说,学会如何打开并使用GitHub是非常重要的。本文将介绍一些基本的步骤和技巧,帮助初学者迅速掌握GitHub的使用方法。一、注册GitHub账号第一步,要打开GitHub...
    99+
    2023-10-22
  • Android中Snackbar的使用方法及小技巧
    Snackbar是Android支持库中新增的控件,用于显示短暂的提示信息。以下是Snackbar的使用方法和一些小技巧:1. 添加...
    99+
    2023-09-14
    android
  • PHP开发中POST方法的使用技巧
    PHP是一种广泛应用于Web开发的编程语言,而在PHP开发中,POST方法是一种常用的数据传输方式。本文将详细介绍在PHP开发中使用POST方法的技巧,并提供具体的代码示例。 一、PO...
    99+
    2024-04-02
  • vue3中$refs的基本使用方法
    1、在vue2中可以通过this来访问到$refs,vue3中由于没有this所以获取不到了,但是官网中提供了方法来获取 知道了怎么获取后,我们结合ElementPlus来使用,因...
    99+
    2024-04-02
  • GoLang中Module的基本使用方法
    目录前言1、开启go module2、用goland打开项目(1)设置镜像地址(2)导入Gin包检查go module是否使用正常(3)使用Gin(4)执行、发送请求3、go mod...
    99+
    2023-01-09
    go module实现原理 go module使用
  • MyBatis中association的基本使用方法
    目录通过association对两表进行联表查询按照查询嵌套处理按照结果嵌套处理总结通过association对两表进行联表查询 student表属性如下 teacher表属性如下...
    99+
    2024-04-02
  • java多线程之CyclicBarrier的使用方法
    java多线程之CyclicBarrier的使用方法public class CyclicBarrierTest { public static void main(String[] args) { ExecutorServi...
    99+
    2023-05-30
    java 多线程 cyclicbarrier
  • java语言中一些方法技巧
    这篇文章将为大家详细讲解有关java语言中一些方法技巧,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列...
    99+
    2023-06-14
  • node工作线程worker_threads的基本使用
    目录前言主线程与工作线程工作线程交互尾言前言 nodejs从第十版开始,支持了真正的多线程编程,今天我们就来学习一下worker_threads工作线程的一些基本使用方法。 主线程与...
    99+
    2023-02-01
    node工作线程worker_threads node工作线程 node worker_threads
  • Collectors.toMap()的基本使用方法
    介绍: 1、Java 8 流的新类 java.util.stream.Collectors 实现了 java.util.stream.Collector 接口,同时又提供了大量的方法对流 ( stream ) 的元素执行 map and ...
    99+
    2023-09-06
    java Powered by 金山文档
  • GNS3的基本使用方法
    GNS3 基本使用方法1.一张基本的拓扑图需要一台路由器,一台交换机,PC一台这里是所有的路由器和交换机及PC,在GNS3里面将路由器直接拖到工作面板中是没有用的,因为每个路由器需要对应的镜像,如图所示:添加镜像的方法在这里面选择...
    99+
    2023-01-31
    使用方法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作