Java线程的状态及常用方法实例分析
这篇文章主要介绍了Java线程的状态及常用方法实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java线程的状态及常用方法实例分析文章都会有所收获,下面我们一起来看看吧。
可以通过 Thread.getState 方法获得线程的状态(线程一共有 6 种状态)
NEW(新建)new:尚未启动
RUNNABLE(可运行状态)runnable:正在 JVM 中运行;或者正在等待操作系统的其他资源(比如处理器)
//有些编程语言会把RUNNABLE分成2种情况
//1.running
//2.ready
//以上2种在Java中都属于RUNNABLE
BLOCKED(阻塞状态) blocked:正在等待监视器锁(内部锁)
WAITING(等待状态) waiting:在等待另一个线程
调用以下方法会处于等待状态
没有超时值的 Object.wait
没有超时值的 Thread.join
LockSupport.park
//后续会详细介绍
TIMED_WAITING(定时等待状态) timed_waiting
调用以下方法会处于定时等待状态
Thread.sleep
有超时值的 Object.wait
有超时值的 Thread.join
LockSupport.parkNanos
LockSupport.parkUnti
//后续会详细介绍
TERMINATED(终止状态):已经执行完毕
部分实例:
public class Main {public static void main(String[] a) {Thread dangqian = Thread.currentThread();//获取主线程System.out.println(dangqian.getState());//输出RUNNABLE//表示主线程正处于RUNNABLE状态Thread tj = new Thread();//新建1个线程System.out.println(tj.getState());//输出NEWThread tj1 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("ACM");}});tj1.start();//启动执行完run方法后线程终止 此时处于TERMINATED状态}}
sleep interrupt 介绍
可以通过 Thread.sleep 方法暂停当前线程,进入WAITING状态
在暂停期间,若调用线程对象的 interrupt 方法中断线程,会抛出 java.lang.InterruptedException 异常
实例(注释)介绍更为明了:
public class Main {public static void main(String[] a) {Thread tj = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("1");try {Thread.sleep(3000);//sleep是静态方法,所以通过类名来调用;让线程睡3s}catch (InterruptedException e) {e.printStackTrace();}System.out.println("2");}});tj.start();//因为是多线程,在执行tj线程时,主线程依然往下走try {Thread.sleep(1000);//让主线程睡1s} catch (InterruptedException e) {e.printStackTrace();}System.out.println("3");//由于tj线程睡得较久,所以先打印3,再打印2tj.interrupt();//中断此线程,但实际上只是给线程设置一个中断标志,线程仍会执行;在这里用于触发异常}}
输出:
1
3
2
join isAlive 介绍
A.join 方法:等线程 A 执行完毕后,当前线程再继续执行任务。可以传参指定最长等待时间
A.isAlive 方法:查看线程 A 是否还活着
实例:
public class Main {public static void main(String[] a) {Thread tj = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("1");try {Thread.sleep(3000);//sleep是静态方法,所以通过类名来调用;让线程睡3s}catch (InterruptedException e) {e.printStackTrace();}System.out.println("2");}});tj.start();System.out.println(tj.isAlive());//此时3s未过,tj线程仍在执行;所以输出truetry {tj.join();//等tj线程执行完毕再往下执行//tj.join(1000); 等待tj线程1s再往下执行} catch (InterruptedException e) {e.printStackTrace();}System.out.println("3"); System.out.println(tj.getState()); System.out.println(tj.isAlive());//tj线程已执行完毕;所以输出false}}
输出:
true
1
2
3
TERMINATED
false
关于“Java线程的状态及常用方法实例分析”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Java线程的状态及常用方法实例分析”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341