黑马程序员技术交流社区
标题:
线程问题
[打印本页]
作者:
张继鲁
时间:
2014-2-24 18:00
标题:
线程问题
停止线程有哪几种方法?
作者:
丶小天
时间:
2014-2-24 19:10
关闭线程有几种方法,
一种是调用它里面的stop()方法(过时了不推荐)
另一种就是你自己设置一个停止线程的标记 (推荐这种)
代码如下:
package com.demo;
//测试Thread()的stop方法和自己编写一个停止标记来停止线程;
public class StopThread() implements Runnable{
//停止线程的标记值boolean;
private boolean flag = true;
public void stopThread()(){
flag = false;
}
public void run(){
int i=0;
while(flag){
i++;
System.out.println(Thread.currentThread().getName()+":"+i);
try{
Thread.sleep(1000);
}catch(Exception e){
}
System.out.println(Thread.currentThread().getName()+"==>"+i);
}
}
public static void main(String args[]){
StopThread st = new StopThread();
Thread th = new Thread(st);
Thread th1 = new Thread(st);
th.start();
th1.start();
try{
Thread.sleep(5500);
}catch(Exception e){
}
/*
如果使用Thread.stop方法停止线程,不能保证这个线程是否完整的运行完成一次
run方法;但是如果使用停止的标记位,那么可以保正在真正停止之前完整的运行完
成一次run方法;
*/
th.stop();
st.stopThread();
}
}
复制代码
作者:
qqwwdr
时间:
2014-2-24 19:23
总的来说,只有一种方法,让线程的run方法结束。
1.定义循环结束标记
因为线程运行代码一般都是循环,只要控制了循环就可以让线程结束。
特殊情况:
当线程处于冻结状态或者说是中断状态(如wait状态。。),就不会读取到循环控制标记的改变,也就无法让线程结束;这个时候就要 使用interrupt(中断)方法
该方法是结束线程的冻结状态,使得线程回到运行状态;同时线程上会产生一个 InterruptedException异常,当没有指定打方式让冻结打线程恢复到运行状态时,需要对冻结状态进行清除;在catch语句中让循环控制标记置位false。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2