这种关闭线程的方法是否安全或者有什么不足

这种关闭线程的方法是否安全或者有什么不足?
代码如下:
[code="java"]
package test;

public class Test extends Thread{

private boolean b = true;

/**
 * 启动线程的方法
 */
synchronized public void run(){
    System.out.println("线程启动");
    while(b){
        //做一些事
    }
}

/**
 * 关闭线程的方法
 */
public void close(){
    b = false;
    System.out.println("关闭线程");
}

}
[/code]

这种做法应该没什么问题,我在开源软件源码里也看到过。不过就是要注意一点,在b被设置为false的时候,run方法可能刚好进入while,这样在你close之后,还会多做一次//做一些事

如果没估计错误的话,这样线程永远停止不了。
线程的同步,在run方法里面是拷贝了一份b变量,你在程序的其他的部位设置b并未通知run方法去更新b变量的新值。
要正确运行的话 应该close方法也加上同步关键字。
而且Thread类停止并不需要你这么实现
Thread里面自带的线程终止标志 isinterrupted, public void run(){
while(!isinterrupted){}}

在server模式下确实是死循环,在client模式下,可能还能关掉。把变量加上volatile就不存在问题了!

这种方式我试了一下没法先什么问题,vm server模式下试了也没有什么问题。但是看一下Thread里面的interupt方法都是调用的本地方法,如果这样可以的话sun也不可能费劲去调用本地方法,所以还是不建议这么去实现。