JUC编程02-线程基础

线程有哪几种状态?

  1. 新建状态
  2. 可运行状态
  3. 阻塞状态(等待cpu时间片,也可能在运行状态)
  4. 无限期等待状态
进入方法退出方法
没有设置 Timeout 参数的 Object.wait() 方法Object.notify() / Object.notifyAll()
没有设置 Timeout 参数的 Thread.join() 方法被调用的线程执行完毕
LockSupport.park() 方法
  1. 限期等待状态
进入方法退出方法
Thread.sleep() 方法时间结束
设置了 Timeout 参数的 Object.wait() 方法时间结束 / Object.notify() / Object.notifyAll()
设置了 Timeout 参数的 Thread.join() 方法时间结束 / 被调用的线程执行完毕
LockSupport.parkNanos()-
LockSupport.parkUntil()-
  1. 死亡状态(线程结束,发生异常而结束)

分别说明从一种状态到另一种状态转变有哪些方式?

在这里插入图片描述

通常线程有哪几种使用方式?

  • 实现Runable方法(实现run方法)
  • 实现Callable方法(有返回值)
  • 继承Thread类 (重写run方法)

基础线程机制有哪些?

  • Excutor
    • 管理多个异步任务的执行,而无需程序员显示的管理线程的生命周期,这的异步指多个任务的执行互不干扰
  • Daemon
    • 守护线程是程序运行时在后台服务的线程,不属于程序中不可或缺的部分
  • sleep() 会休眠当前正在执行的线程
  • yield() 会建议优先运行当前线程

线程的中断方式有哪些?

  1. 调用interrupt()方法,如果该线程处于阻塞或者无限期等待,限期等待中就会抛出异常,从而提前结束该线程,但是这个方法不能中断I/O阻塞,和synchronize锁阻塞
  2. interrupted()方法可以检测当前执行中的线程是否为中断状态,但是并未中断,此时就可以提前结束线程
  3. excutor.shutdown()方法相当于调用了每个线程的interrupt方法

线程的互斥同步方式有哪些?

  1. 基于JVM的synchronize
  2. 基于JDK实现的Reentrantlock

如何比较和选择?

除非需要使用 ReentrantLock 的高级功能,否则优先使用 synchronized。这是因为 synchronized 是 JVM 实现的一种锁机制,JVM 原生地支持它,而 ReentrantLock 不是所有的 JDK 版本都支持。并且使用 synchronized 不用担心没有释放锁而导致死锁问题,因为 JVM 会确保锁的释放。

线程之间有哪些协作方式?

  1. join() 方法
    在当前线程调用另一线程的join方法时,当前线程会等待另一线程执行完毕才会执行当前线程
  2. wait(),notify(),notifyAll()
    • wait()挂起期间,线程会释放锁,让其它的线程进入执行状态,若是没有释放锁,就无法执行notify 或者 notifyall’方法唤醒挂起的线程,从而造成死锁
    • sleep() 方法则不会释放锁
  3. await() signal() signalAll()
    • 该方法同上 只是更加灵活
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值