那么要怎么终止一个线程呢?

虽然Thread.stop( )方法可以结束一个线程,但是eclipse已经将这个方法标注成一个“废弃”的方法,也就是不推荐使用,原因大家都知道,就是stop( )方法直接终止线程并释放掉锁,容易造成一些对数据进行修改的线程出问题,例如导致多个线程读到不一致的数据的情况。看看下面这个例子:

那么要怎么终止一个线程呢?

那么要怎么终止一个线程呢?

代码要做的事情就是新建一个写线程和一个读线程,写线程修改变量的值,读线程把值显示出来。写线程在31行开始,获得一个随机数v并赋值给类私有对象id和name,写线程先给变量id赋值v,然后休眠100毫秒,再给变量name赋值。而读线程(第52行开始)则是一直读变量id和name,如果发现两者的值不一致后,就输出两者的值。主线程(第64行开始),新建一个读线程并执行,然后while(true)死循环不停用写线程对数据变量id和name做修改,然后用stop( )方法结束写线程,看看情况会怎么样?

那么要怎么终止一个线程呢?

读线程频繁读出两个数据不同步的情况,也就是说,写线程多次还没执行完就被结束了,而且导致数据不同步的问题,我们的写线程希望做的是把变量id和name都赋值相同的值,可是事实并没有做到。

      既然eclipse将stop( )方法标志为“废弃的”,那就是不鼓励我们使用,如果我们要结束一个线程,可以用添加标记的方式,以前写c时常用的判断标记来跳出循环- -、。

那么要怎么终止一个线程呢?

在线程重构函数run( )里设置一个标记“stop”,一开始初始化为false,然后定义一个方法stopThread( )用来设置标记位为true,当我们需要结束线程时,就调用stopThread( )方法,标志位设置为true后,代码第42行检测到标志位改变后,就会break结束while循环,用这种方式结束线程,就可以保证修改数据部分不会出错。

那么要怎么终止一个线程呢?