第9集 | Java线程管理

本文详细介绍了Java中线程管理的关键任务,包括创建线程(继承Thread类和实现Runnable接口)、启动线程、线程调度(协同式与抢占式)、设置线程优先级、状态监控、线程中断和线程间通信。还讨论了守护线程和join()方法的使用。
摘要由CSDN通过智能技术生成

在Java中,线程管理涉及创建、启动、停止、调度和监控线程等。以下是一些Java中常见的线程管理任务以及如何进行线程管理的方法:

  1. 创建线程:在Java中,创建线程有多种方式,以下是常见的几种创建线程的方式:从官方Thread类的代码注释上看,创建线程的方式只有继承Thread类和实现Runnable接口两种。至于使用匿名内部类和使用Lambda表达式只是写法不同而已。至于线程池呢,本质是池化技术,用于管理和重用线程的,所以不能算创建线程的方式。
  2. 启动线程:使用Thread类的start()方法来启动线程。线程启动后,会自动执行run()方法中的代码。
  3. 线程调度:Java提供了线程调度器来决定线程的执行顺序。你可以使用Thread类的yield()方法来建议线程调度器将CPU时间片切换给其他线程,或者使用Thread类的sleep()方法来让线程休眠一段时间。线程调度是指系统为线程分配CPU使用权的过程,主要调度方式有以下两种:
    1. 协同式线程调度:使用协同式线程调度的多线程系统,线程执行的时间由线程本身来控制,线程把自己的工作执行完之后,要主动通知系统切换到另外一个线程上。使用协同式线程调度的最大优点是实现简单,由于线程把自己的事情做完后才通知操作系统进行线程切换,所以不存在线程同步问题,但是缺点也很明显,如果一个线程出了问题,则程序就会一直阻塞。
    2. 抢占式线程调度:使用抢占式线程调度的多线程系统,每个线程执行的时间以及是否切换都由操作系统决定。这种情况,线程的执行时间将不可控,所以不存在一个线程导致整个进程阻塞的问题。
  4. 线程优先级:可以为线程设置优先级,高优先级的线程在竞争CPU时间片时更有可能被执行。但是,优先级的实际影响因操作系统而异,不应过度依赖。Thread类的setPriority(Thread.MAX_PRIORITY) 可以设置线程优先级为最高。
  5. 线程状态监控:你可以使用Thread类的方法来查询线程的状态、获取线程名称等信息。  调用Thread类的getState()来获取线程状态。调用Thread类的getName()来获取线程名称。
  6. 线程中断:有以下三种方式:
    1. 第一种是线程自然终止。
    2. 第二种是调用Thread.stop()方法,该方法已过时,不建议使用,为什么不建议使用,后面会单独讲,有道面试题可能会问到。
    3. 调用Thread.interrupt()方法,推荐使用这种方式。
  7. 等待线程完成:使用Thread类的join()方法可以等待一个线程执行完毕。这在需要等待某个线程完成后再执行其他操作时很有用。
  8. 守护线程:调用Thread类的setDaemon(true)你可以将线程设置为守护线程,它会在所有非守护线程结束后自动退出。守护线程通常用于后台任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值