深入了解JUC并发(三)线程的基本操作

线程的基本操作

所有方法图示

在这里插入图片描述

在这里插入图片描述

wait和notify

概念
  1. wait()让进入object监视器的线程等待
  2. notify()在object上正在等待的线程中挑一个唤醒
  3. wait(long timeout)让进入object监视器的线程等待,如果过了timeout秒没被唤醒,就自动唤醒并进行下面的流程
  4. notifyAll()让object上正在等待的线程全部唤醒
注意

它们都是线程之间进行协作的手段,都属于Object对象的方法。必须获得此对象的锁,才能调用这几个方法

在这里插入图片描述

obj.wait(long timeout)例子:

在这里插入图片描述

sleep/wait
  1. sleep是 Thread方法,而wait是Object的方法
  2. sleep不需要强制使用,但wait需要和synchronized配合使用
  3. sleep在睡眠的同时,不会释放对象锁,但wait在等待的时候会释放对象锁
  4. wait是不需要捕获异常,sleep必须要捕获异常

过时方法

stop() 停止线程运行 interrupt代替

suspend() 暂停线程 wait代替

resume() 唤醒线程 notify代替

守护线程

默认情况下,Java进程需要等待所有线程都运行结束,才会结束。有一种特殊的线程叫做守护线程,只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。

在这里插入图片描述

while死循环,运行没有结束

在这里插入图片描述

加了t1的守护线程,当main结束时,t1跟着结束

创建线程的四种方式

继承Thread
重写Runnable

在这里插入图片描述

推荐使用Runnable:

  1. 用 Runnable更容易与线程池等高级AP配合
  2. 用 Runnable让任务类脱离了 Thread继承体系,更灵活
FutureTask配合Thread

实现callable接口

在这里插入图片描述

线程池(开发运用)

重复利用,提高效率

1、提供线程池

ThreadPoolExecutor servic = (ThreadPoolExecutor) Executors.newFixedThreadPool(10);

2、属性设置

在这里插入图片描述

3、运用

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值