Java线程终止实例分析
导读:本文共1914.5字符,通常情况下阅读需要6分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 题目解析答案选CA:线程使用sleep()方法,使线程挂起一段时间,并不是终止B: 创建一个新线程时,对之前的线程没有影响C:抛出一个例外,线程终止D: 并不是终止,而是抢占,进程是资源分配的最基本单位,同一个进程创建的不同线程共享这些资源,当某一个线程优先级比较高时,它就会抢占其他线程的资源,导致其他线程没有资源可用,会造成阻塞线程结束的三个原因1、run方法... ...
目录
(为您整理了一些要点),点击可以直达。题目解析
答案选C
A:线程使用sleep()方法,使线程挂起一段时间,并不是终止
B: 创建一个新线程时,对之前的线程没有影响
C:抛出一个例外,线程终止
D: 并不是终止,而是抢占,进程是资源分配的最基本单位,同一个进程创建的不同线程共享这些资源,当某一个线程优先级比较高时,它就会抢占其他线程的资源,导致其他线程没有资源可用,会造成阻塞
线程结束的三个原因
1、run方法执行完成,线程正常结束
2、线程抛出一个未捕获的Exception或者Error
3、直接调用该线程的Stop方法结束线程(不建议使用,容易导致死锁)
具体分析
线程结束的三种方法
①使用标志位退出线程
②使用stop方法强制终止线程
③使用interrupt终止线程
1、使用标志位推出线程
一般 run()方法执行完,线程就会正常结束,然而,常常有些线程是伺服线程。它们需要长时间的运行,就要使用一个变量控制循环
定义了一个退出标志 exit,当 exit 为 true 时,while 循环退出,exit 的默认值为 false.在定义 exit 时,使用了一个 Java 关键字 volatile,这个关键字的目的是使 exit 同步,同一时刻只 能由一个线程来修改 exit 的值
publicclassThreadSafeextendsThread{publicvolatilebooleanexit=false;publicvoidrun(){while(!exit){//dosomething}}}
2、使用stop方法强制终止线程
程序中可以直接使用 thread.stop()来强行终止线程,但是 stop 方法是很危险的,就象突然关 闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,不安全主要是: thread.stop()调用之后,创建子线程的线程就会抛出ThreadDeatherror 的错误,并且会释放子 线程所持有的所有锁。
3、使用interrupt终止线程
当线程处于两种状态时,使用interrpt终止
(1)线程未处于阻塞状态:
使用 isInterrupted()判断线程的中断标志来退出循环,再使用 interrupt()方法时,中断标志就会置 true,和使用自定义的标志来控制循环是一样的
publicclassMyThreadextendsThread{@Overridepublicvoidrun(){try{for(inti=0;i<500000;i++){if(interrupted()){System.out.println("已经是停止状态了");thrownewInterruptedException();//中断异常}System.out.println("i="+(i+1));}System.out.println("我在for下面");}catch(InterruptedExceptione){System.out.println("进run方法中的catch了!");e.printStackTrace();}}}
(2)线程处于阻塞状态:如使用了sleep方法,同步锁的 wait,socket 中的 receiver,accept 等方法时,调用线程的 interrupt()方法
publicclassThreadInterruptextendsThread{publicvoidrun(){try{sleep(50000);//延迟50秒}catch(InterruptedExceptione){System.out.println(e.getMessage());}}publicstaticvoidmain(String[]args)throwsException{Threadthread=newThreadInterrupt();thread.start();System.out.println("在50秒之内按任意键中断线程!");System.in.read();thread.interrupt();thread.join();System.out.println("线程已经退出!");}
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
Java线程终止实例分析的详细内容,希望对您有所帮助,信息来源于网络。