线程学习笔记

sleep方法

  • 首先会让线程从running状态进去到timed waiting(阻塞)状态。
  • 其他线程如果使用interrupt方法打断正在睡眠状态的线程,这是sleep方法会抛出InterruptedException异常。
  • 睡眠后的线程时runnable(可执行)状态,并不是直接执行的running状态。
  • 建议使用TimeUnit的sleep代替Thread的sleep方法,TimeUnit是jdk1.5引入

yield方法

  • 调用yield方法后,线程从running状态,进入到runnable(可运行)状态,让出cpu资源。
  • 具体的实现还依赖于操作系统的任务调度器。

线程的优先级 优先级1~10,默认优先级5。

  • 线程优先级会提示调度器优先调度该线程,但仅仅是个提示,调度器可以忽略。
  • 如果cpu较忙,那么优先级高的线程会获得较多的时间片,当cpu闲时,优先级几乎没有作用

防止服务器cpu占用100%

  • 使用sleep或yield方法,让出cpu的使用
  • 可以使用wait或者变量的方式控制
  • 不同的是,后两种都需要加锁,并且需要唤醒操作,一般适用同步场景。
  • sleep适用于无需锁的场景

join方法
等待线程运行结束后,接着往下运行(同步)

interrupt方法
用来打断sleep(睡眠)或者runnable(正在运行)的线程,如果打断runnable(正在运行)的线程,会抛出InterruptedThreadException异常。
其他线程调用interrupt方法,并不会打断其线程,应在run方法内获取线程的interrupt值,来判断是否停止该线程。

isInterrupted方法
判断是否被打断,Thread有一个静态方法interrupted,判断当前线程是否被打断。方法类似,但是isInterrupted方法不会清除打断标记,interrupted会清除打断标记。

两阶段终止模式(Two Phase Termination)
在A线程中,终止B线程的运行,主要是给B线程一个安排后事的信号。
在这里插入图片描述

错误思路

  • 不可以调用stop方法来停止线程,但如果该线程锁住了共享资源,那么杀死该线程后,因为没有释放锁,导致其他线程永远无法获得该共享资源
  • 使用System.init(int)方法停止线程,导致整个进程停止。

park方法
LockSupport的静态方法,使当前线程锁住,直到调用Thread.interrupted方法,打断线程,并且不清楚打断标记,才可以继续执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值