网游政策观察 - 行业合规指南

java多线程之suspend(),resume()和stop()方法

  • Home
  • 政策分析
  • java多线程之suspend(),resume()和stop()方法
  • 2026-07-23 21:15:08
  • admin

1:方法介绍

suspend():暂停任务

resume():恢复任务

stop():停止任务

不推荐在使用这三个方法已suspend方法为例,在调用后,线程不会释放已经占有的资源比如锁,而是带着资源进入睡眠状态,十分容易引发死锁。同样stop方法在终结一个线程时,不能保证线程资源的正常释放,通常灭有基于线程完成资源释放的机会。

2:如何优雅的终止或者暂停线程尼?

package concurrencyTest4_2_5;

import java.util.concurrent.TimeUnit;

/**

* @author :dazhu

* @date :Created in 2020/4/8 17:22

* @description:避免使用suspend,resume和stop,如何优雅的暂停和恢复线程尼?

* @modified By:

* @version: $

*/

public class ShutDown {

public static void main(String[]args) throws Exception{

Runner one = new Runner();

Thread countThread = new Thread(one,"CountThread");

countThread.start();

//main线程睡眠1s

TimeUnit.SECONDS.sleep(1);

//通过interrupt方法来停止该线程

countThread.interrupt();

Runner two = new Runner();

countThread = new Thread(two,"CountThread");

countThread.start();

//main线程睡眠1秒,main线程对Runner two 进行取消,使得CountThread能够感知到on为false而结束

TimeUnit.SECONDS.sleep(1);

//通过调用cancel方法来停止该线程

two.cancel();

}

private static class Runner implements Runnable{

private long i;

private volatile boolean on = true;

@Override

public void run(){

System.out.println("进入run方法");

while(on&&!Thread.currentThread().isInterrupted()){

i++;

}

System.out.println("Count i = " +i);

System.out.println("run方法结束");

System.out.println("*************");

}

public void cancel(){

on = false;

}

}

}

使用中断方法或者cancel标志位方法都有机会让线程取释放自己占有的资源,这种方法更安全和优雅。

Previus Post
【统计小课堂】“净服务收入”知多少?

Copyright © 2088 网游政策观察 - 行业合规指南 All Rights Reserved.
友情链接