(1)stop方法是过时的从Java编码规则来说,已经过时的方法不建议采用。
(2)stop方法会导致代码逻辑不完整stop方法是一种“恶意”的中断,一旦执行stop方法,即终止当前正在运行的线程,不管线程逻辑是否完整,这是非常危险的。
(3)stop方法会破坏原子逻辑多线程为了解决共享资源抢占的问题,使用了锁概念,避免资源不同步,但是正因此原因,stop方法却会带来更大的麻烦:它会丢弃所有的锁,导致原子逻辑受损。
/*
测试停止线程
1.建议线程正常停止-->利用次数,不建议死循环
2.建议使用标志位
3.不要使用stop或者destroy等过时或者JDK不建议使用的方法(存在一些BUG或者弊端)
setPriority(int newPriority) 更改线程的优先级
static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠
void join() 等待该线程终止
static void yield() 暂停当前正在执行的线程对象,并执行其他线程
void interrupt() 中断线程,别用这个方式
boolean isAlive() 测试线程是否处于活动状态
?*/
public class TestStop implements Runnable{
//1.设置一个标志位 私有的 保证安全
????private boolean flag = true;
????@Override
????public void run() {
????????int i = 0;
????????while (flag){
System.out.println("线程正在运行!"+i++);
????????}
????}
//2.设置一个公开的方法停止线程,转换标志位
????public void stop(){
????????this.flag = false;
????}
????public static void main(String[] args) {
????????TestStop testStop = new TestStop();
????????new Thread(testStop).start();
????????for (int i = 0; i < 1000; i++) {
????????????System.out.println("main"+i);
if (i==100){//100的时候停止
testStop.stop();//调用stop方法停止运行(自己写的stop方法)
System.out.println("线程停止运行!");
//两个i是分别存活在两个线程里的独立参数,两个线程没关系,不需要break
//注意:这里是主线程到100时,停止子线程
????????????}
????????}
????}
}