Chinaunix首页 | 论坛 | 博客
  • 博客访问: 177159
  • 博文数量: 43
  • 博客积分: 1428
  • 博客等级: 上尉
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-02 09:33
文章分类

全部博文(43)

文章存档

2014年(3)

2013年(3)

2011年(1)

2010年(36)

分类: Java

2010-09-06 10:58:04

不可以由一个线程去中断另一个线程,也没办法强制一个线程立即中止。只能由该线程自身提交中断请求,由操作系统根据情况自动处理。

     当在提交一个线程的中断请求命令前,往往需要先检查一下该线程是否处于非中断状态。如果该进程被阻塞,则该线程无法检查自身是否处于中断状态,并抛出InterruptedExeption异常(即由isInterrupted方法抛出该异常)。

 try
{
    while (!Thread.currentThread().isInterrupted()) //检查当前进程是否处于非中断状态

    {
        //do some work
    }
}
catch (InterruptedException e)
{
}

     中断一个线程并非是中止该线程(当然,大多数情况下,中断一个线程就是想中止它),中断线程的目的有的时候是让该线程进行计算或者分析,当线程恢复后该执行哪些命令。

     有些重要的线程,在被中断时即使抛出了InterruptedExeption异常,也还需要进行一些命令步骤,这些命令被卸载final{...}里面。

public void run()
{
    try
    {
        while (!Thread.currentThread().isInterrupted())
        {
           //do some work
        }
    }
    catch (InterruptedException e)
    {
        Thread.currentThread().interrupt();
    }

    final
    {
       //do some extra work       
    }
}

     如果每次执行完任意一个线程的命令后,都把该线程sleep了,则不需要用isInterrupted方法检查该线程是否处于中断状态。因为当一个线程处在sleep状态时,对该线程请求中断会自动抛出InterruptedException异常,所以就有:

public void run()
{
    try
    {
        while (some condition)
        {
           //do some work
           Thread.sleep(DELAYS);
        }
    }
    catch (InterruptedException e)
    {
        Thread.currentThread().interrupt();
    }
    final
    {
       //do some extra work        
    }
}

     除了上面的isInterrupted方法可以检查线程是否处于中断状态以外,还有interrupted方法也有类似的效果。它们之间的区别是:interrupted方法是一个静态方法,这样它只能检查当前线程是否处于中断状态;而isInterrupted方法是一个instance method,所以它用来检查任意一个线程是否处于中断状态。

 

注意:catch (InterruptedException e){...} 的时候,尽量不要把大括弧里的内容不写。即使你想不出来抓到异常后该做什么,也可以直接在大括号内写上:

catch (InterruptedException e)
{
    Thread.currentThread().interrupt(); //对当前线程直接抛出异常
}

或者干脆把异常throw掉,让使用它的程序来接受异常。总之不要把异常屏蔽掉。

public void myTask() throw interruptedException
{
    while (!Thread.currentThread().isInterrupted())
    {
        //do some work
    }
}

阅读(1102) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-08 10:01:03

Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com