您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Java 线程的状态与常用方法分析及示例

2024/6/2 0:46:05发布20次查看
可以通过 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());//输出new thread tj1 = new thread(new runnable() { @override public 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() { @override public 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,再打印2 tj.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() { @override public 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线程仍在执行;所以输出true try { 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 线程的状态与常用方法分析及示例的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product