linux 线程的生命周期,线程的生命周期的方法

本文详细解析线程的生命周期过程,包括创建、执行、阻塞和死亡状态。重点讲解yield()让步、sleep()休眠、join()阻塞等待和interrupt()中断线程的方法,并通过实例演示如何使用。同时介绍isAlive()方法判断线程状态。
摘要由CSDN通过智能技术生成

线程的生命周期:

指线程从创建到启动,直至运行结束,可以通过调用Thread的相关方法影响线程的运行状态

线程的运行状态::

新建、可执行、运行、阻塞、死亡

yield():若当前线程调用该方法,则由执行状态变成可运行状态

package org.jsoft.Thread;

public class YieldThreadTest extends Thread{

public static void main(String[] args) {

Thread t1 = new YieldThreadTest("线程-1");

Thread t2 = new YieldThreadTest("线程-2");

t1.start();

t2.start();

}

public YieldThreadTest(String name){

super(name);//这的name第什么,threadName就是什么

}

@Override

public void run() {

super.run();

for(int i = 0; i < 100; i++){

String threadName = Thread.currentThread().getName();

System.out.println(threadName + ":" + i);

if(i%10 == 0){

yield();//让当前进程重新进入到可执行状态,也就是让出了CPU的控制权,谁抢到谁就执行

}

}

}

}

进入阻塞状态下的三种情况:

1.调用sleep方法(使当前线程休眠一段时间,以毫秒为单位)

2.调用join方法(处在执行状态的线程如果调用了其他线程的join方法,将被挂起进入阻塞状态,目标线程执行完毕后才会接触阻塞,回到可执行状态)

3.执行I/0操作-

join()例子:

package org.jsoft.Thread;

public class JoinThreadTest extends Thread{

public static void main(String[] args) {

Thread t1 = new JoinThreadTest();

t1.start();

for(int i = 0; i < 100; i++){

String threadName = Thread.currentThread().getName();

System.out.println(threadName + ":" + i);

if(i == 10){

try {

t1.join();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

@Override

public void run() {

super.run();

for(int i = 0; i < 100; i++){

String threadName = Thread.currentThread().getName();

System.out.println(threadName + ":" + i);

}

}

}

interrupt():可以解除线程的阻塞状态

package org.jsoft.Thread;

public class InterruptThreadTest extends Thread{

public static void main(String[] args) {

InterruptThreadTest t1 = new InterruptThreadTest();

t1.start();

//调用阻塞线程的interrupt方法(线程睡眠时,调用该线程的interrupt方法会抛出interrruptedException)

t1.interrupt();

}

@Override

public void run() {

for(int i = 0; i < 100; i++){

String threadName = Thread.currentThread().getName();

System.out.println(threadName + ":" + i);

if(i == 10){

try {

Thread.sleep(1000000);//子类不能抛出比父类更大的异常,所以只能try catch

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

}

isAlive()判断线程是否活着(即非死亡状态):

package org.jsoft.Thread;

public class IsAliveThreadTest extends Thread{

public static void main(String[] args) {

IsAliveThreadTest thread = new IsAliveThreadTest();

System.out.println(thread.isAlive());//false,因为线程还没有执行

thread.start();//进行可执行状态,抢占CPU的资源

System.out.println(thread.isAlive());//true,因为线程执行了

//在当前的main线程中调用thread线程的join()来让thread这个线程运行完毕,挂起当前的main线程

try {

thread.join();

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(thread.isAlive());//false,因为线程执行完毕

thread.start();//线程执行完毕后在开启则会报错:java.lang.IllegalThreadStateException

}

@Override

public void run() {

for(int i = 0; i < 100; i++){

String threadName = Thread.currentThread().getName();

System.out.println(threadName + ":" + i);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值