论坛首页 Java企业应用论坛

多线程 interrupt() 中断

浏览 11457 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-17  
有两个类,A类是thread,C类启动类类,然后调用A的interrupt),为什么线程A不会结束啊
public class c {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		A aa = new A();
		aa.start();
		try {
			Thread.sleep(100);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(aa.isInterrupted());
		aa.interrupt();// 中断
		System.out.println(" isInterrupted();" + aa.isInterrupted());
	}

}



public class A extends Thread {

	public A(){
		
	}
	public void run(){
		while(!Thread.currentThread().isInterrupted()){
			System.out.println("A  在中断前:"+Thread.currentThread().isInterrupted());
			try {
			Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				System.out.println("--A  在中断异常---:"+isInterrupted());

				e.printStackTrace();
			}
		}
		
	}

}
   发表时间:2011-10-18  
} catch (InterruptedException e) { 
                // TODO Auto-generated catch block 
                System.out.println("--A  在中断异常---:"+isInterrupted()); 
 
                e.printStackTrace(); 
            } 


这里加一段Thread.currentThread().interrupt(); interrupt响应为InterruptedException后就会被重置,需要重新设置下
0 请登录后投票
   发表时间:2011-10-18  
Thread#interrupt() 并不会强制线程中断,它只是向这个线程发送中断信号。

需要这个线程自己接受中断信号,并执行中断操作。
0 请登录后投票
   发表时间:2011-10-18  
agapple 写道
} catch (InterruptedException e) { 
                // TODO Auto-generated catch block 
                System.out.println("--A  在中断异常---:"+isInterrupted()); 
 
                e.printStackTrace(); 
            } 


这里加一段Thread.currentThread().interrupt(); interrupt响应为InterruptedException后就会被重置,需要重新设置下

interrupt响应为InterruptedException后就会被重置,如果线程有被重置带你,那应该就退出程序了,可是程序没退出
0 请登录后投票
   发表时间:2011-10-18  
s929498110 写道
Thread#interrupt() 并不会强制线程中断,它只是向这个线程发送中断信号。

需要这个线程自己接受中断信号,并执行中断操作。

sleep 还是会被中断的,而且也跑出异常,如果线程不接受中断,应该是不抛出异常
程序代码输出;

A  在中断前:false
false
C:isInterrupted();true
--A  在中断异常---:false
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at A.run(A.java:22)
A  在中断前:false
A  在中断前:false
A  在中断前:false
A  在中断前:false
A  在中断前:false
A  在中断前:false
A  在中断前:false
A  在中断前:false
A  在中断前:false
A  在中断前:false
A  在中断前:false
A  在中断前:false
A  在中断前:false
0 请登录后投票
   发表时间:2011-10-18  
lz不懂interrupt是什么
interrupt默认情况只做了一件事,就是改了一个boolean的field
0 请登录后投票
   发表时间:2011-10-18  
gtssgtss 写道
lz不懂interrupt是什么
interrupt默认情况只做了一件事,就是改了一个boolean的field

那为什么C中输出的a.isinterrupted(),跟程序A 中Thread.currendThread.isinterrupted()补一样啊
0 请登录后投票
   发表时间:2011-10-18  
chinadeng 写道
gtssgtss 写道
lz不懂interrupt是什么
interrupt默认情况只做了一件事,就是改了一个boolean的field

那为什么C中输出的a.isinterrupted(),跟程序A 中Thread.currendThread.isinterrupted()补一样啊


因为被sleep改了啊
0 请登录后投票
   发表时间:2011-10-18  
我认为 执行interrupt 会抛出一个中断异常。而且中断线程就是靠这个异常机制执行的。如果把这段代码TRY CATCH了。中断当然就停止了。
0 请登录后投票
   发表时间:2011-10-19  
agapple 写道
} catch (InterruptedException e) { 
                // TODO Auto-generated catch block 
                System.out.println("--A  在中断异常---:"+isInterrupted()); 
 
                e.printStackTrace(); 
            } 


这里加一段Thread.currentThread().interrupt(); interrupt响应为InterruptedException后就会被重置,需要重新设置下

这个是才是真理!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics