多线程小回顾

本文回顾了多线程的价值,如发挥多核CPU优势、防止阻塞和提高效率,并介绍了四种创建线程的方式,包括继承Thread、实现Runnable、Callable和线程池。此外,还讨论了线程的不同状态,如新建、就绪、运行、阻塞和死亡状态,以及各种阻塞状态的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 多线程的价值
    (1)发挥多核CPU的优势
    多线程可以真正发挥多核Cpu的优势,采用多线程的方式同时去完成·几件事而互不干扰,达到充分利用Cpu的目的。
    (2)防止阻塞
    从程序运行效率来看,单核CPU会由于运行多线程导致上下文的切换,而降低程序整体效率。但是单核CPU还是要用多线程,目的就是为了防止阻塞。比如现在是单核CPU单线程,进行数据读取,对端迟迟不返回且未设置超时时间,那么整个程序在数据返回之前就停止运行了。多线程可以防止这个问题,一条线程的代码执行读取数据阻塞,也不会影响其他任务执行。
    (3)效率高
    .

  • 创建线程的几种方式
    (1)继承Thread类创建线程类
    (2)实现Runnable接口创建线程类
    (3)通过Callable和Future创建线程
    (4)通过线程池的创建

  • 创建线程的三种方式的对比
    (1)采用实现Runnable、Callable接口的方式创建线程
    线程类只是实现了接口,还可以继承其他类。这种方式下,多个线程可以共享同一个target对象,适合多个相同线程处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好体现了面向对象的思想。
    劣势:代码稍微复杂,获取当前线程要使用Thread.currentThread()方法
    (2)继承Thread类的方式创建多线程
    已经继承了Thread类,不能再继承其他父类
    (3)Runnable和Callable的区别
    1.Callable规定(重写)的方法是call(),Runnable规定(重写)的方法是run()
    2.Callable的任务执行后有返回值,Runnable没有
    3.call()方法可以抛出异常,run()方法不可以
    4.运行Callable任务会拿到一个Future对象,表示异步计算的的结果。通过Future对象可了解任务执行情况,可取消任务的执行,可获取执行结果。

  • Java线程中的基本状态
    (1)新建状态:new
    线程对象创建后,即进入了新建状态。Thread thread=new MyThread();
    (2)就绪状态:Runnable
    当调用线程对象的start()方法(thread.start()),线程即进入就绪状态。
    处于就绪状态的线程,说明此线程已经做好了准备,随时等待CPU的调度执行。并不是说执行了thread.start()此线程就会立即执行
    (3)运行状态(Running):
    当CPU开始调度处于就绪状态的线程时,此时线程才得以真正的执行,进入运行状态。
    注:就绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中。
    (4)阻塞状态(Blocked)
    处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时就进入阻塞状态,直到进入就绪状态,才 有机会被CPU调用进入运行状态
    (1)等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态。
    (2)同步阻塞:线程在获取synchronized同步锁失败(因为锁被其他线程占用),
    它会进入同步阻塞状态。
    (3)其他阻塞:通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时,join()等待线程终止或超时,或者I/O处理完毕时,线程重新转入就绪状态。

(5)死亡状态(dead)
线程执行完或因异常退出了run()方法,该线程结束生命周期。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

little-peter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值