Thread相关基础

本文介绍了Java线程的基础知识,包括线程的五个状态(创建、就绪、运行、阻塞、死亡),start()和run()方法的区别,Thread与Runnable对象的差异,以及实现多线程的三种方式(继承Thread、实现Runnable、使用线程池)。同时,文章详细讨论了sleep()和wait()方法的不同以及它们对CPU占用率的影响。

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

1、Thread的状态:

线程大概可分为5个状态,

1.创建状态(NEW),当Thread被New出来,还未调用start()方法之前;

2.就绪状态,当Thread对象调用start()方法之后;

3.运行状态(RUNNABLE),当Thread对象调用start()方法开启线程并在新线程中调用执行run()方法时的状态;

4.阻塞状态(BLOCK,WAITING,TIME-WAITING),当Thread调用sleep,wait等方法或者等待某个线程或函数释放锁;

5.死亡状态,当Thread运行结束或抛出异常之后;


2、start()和run()区别

start()只是启动一个新线程,然后在新线程中调用run方法,此时的线程就是处于运行状态了,

而run()只是在当前线程中调用run()函数。


3、Thread与Runnable的区别

Thread可以理解为线程对象,Runnable理解为任务对象。Runnable并不能开启一个新的线程,只能描述一个在线程中执行的任务,Thread才能开启一个新的线程。


4、实现多线程的三种方法

a)继承Thread,重新run方法

b)新建Runnable对象并将其传入Thread的构造方法

c)新建Runnable对象并将其代入线程池类


5、sleep与wait的区别以及对CPU占用率的影响

sleep是Thread类的方法,wait是Object类的方法

所有与锁相关的方法都定义在Object类中,所以如果线程当前是拥有对象锁的,sleep方法并不会释放对象锁,wait会释放对象锁

调用sleep方法OS对其的监控状态依然会保持,当指定时间过后又会自动恢复执行,调用wait方法会让该对象进入等待锁定池,只有其他线程执行notify或者notify all 才会重新进入对象锁定池准备获取对象进入运行状态

两种方法暂停线程都表示他们暂时不需要CPU执行时间,OS会将CPU执行时间分配给其他线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值