由于是第一次在技术坛发帖,写的不好请各位大大勿拍!
public class InterruptTest extends Thread{
static int result=0;
public InterruptTest(String name)
{
super(name);
}public static void main(String args[]) { System.out.println("开始主线程"); Thread t1 = new InterruptTest("计算机线程"); t1.start(); //System.out.println("result:"+result); try { long time1 = System.nanoTime(); t1.join(2000); long time2 = System.nanoTime(); t1.interrupt();//中断线程 System.out.println((time2-time1)/1000000+"毫秒后"+result); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void run() { System.out.println(this.getName()+"开始计算......"); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block System.out.println(this.getName()+"线程被中断......"); return; //e.printStackTrace(); } result = (int)(Math.random()*10000); System.out.println("------"+result); System.out.println(this.getName()+"结束计算....."); }
}
console的输出信息为:
按照正常情况来说的话,线程interrupt后,后面的语句应该是不执行的。以前对线程总是半知半解的,这次希望大家给我解解惑!
问题补充
悲剧了 写道
哥们你 Thread t1 = new JoinTest("计算机线程");
中JoinTest来自哪?
中JoinTest来自哪?
额,不好意思,写错了!
问题补充
恩,线程中断之后应该是不会执行后面的语句了吧?
问题补充
悲剧了 写道
java_xiaoyi 写道
恩,线程中断之后应该是不会执行后面的语句了吧?
你说的是这个么?
System.out.println((time2 - time1) / 1000000 + "毫秒后" + result);
如是,你只是中断你的t1线程,关main线程什么事情
不是这个,因为我在主线程里调用了join方法,然后突然interupt掉,这个时候在run方法应该会报异常,进入到catch里面去,输出"System.out.println(this.getName()+"线程被中断......");"这个吧?
问题补充
引用
不中断的原因是你的join时间太长, 改成t1.join(800)
明白了!哎,现在知道这个帖子太烂了~~ 下次发帖一定注意!
问题补充
blackbeans 写道
哥们你这个程序在
t1.interrupt();//中断线程
这一步的时候Thread.sleep(1000)已经过期了,从sleep可中断块已经走出来了,而这个时候interrupt是已经失效了,interrupt只能打断能够接收中断的信号的操作,比如阻塞的take(),poll()这些
t1.interrupt();//中断线程
这一步的时候Thread.sleep(1000)已经过期了,从sleep可中断块已经走出来了,而这个时候interrupt是已经失效了,interrupt只能打断能够接收中断的信号的操作,比如阻塞的take(),poll()这些
你的意思是说不能中断sleep的操作?
问题补充
悲剧了 写道
java_xiaoyi 写道
引用
不中断的原因是你的join时间太长, 改成t1.join(800)
明白了!哎,现在知道这个帖子太烂了~~ 下次发帖一定注意!
没事,大家都是这么过来的,只要态度好就很好
呵呵,共勉!
问题补充
icewubin 写道
实际工作中,一般不使用interrupt这种方式。
冰神,你太全能了吧,编程也懂?