当前位置: 首页>后端>正文

线程的错误终止:stop

线程的错误终止:stop,第1张

(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时,停止子线程

????????????}

????????}

????}

}


https://www.xamrdz.com/backend/3bb1938256.html

相关文章: