gpt4 book ai didi

java - 如何仅关闭 ScheduledExecutorService 中选定的线程?

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:59:04 25 4
gpt4 key购买 nike

我有很多设施。每当设施打开时,它们都会调用一些类,以便它们可以以固定的预定速率运行。如果设施关闭,我需要关闭该特定设施的线程。当我尝试关闭并稍后重新打开同一设施时,我如何实现我得到 RejectedExecutionException。感谢帮助。我的代码类似如下:

 private static final ScheduledExecutorService svc = Executors
.newSingleThreadScheduledExecutor();
private static ScheduledFuture<?> syncThreadHandle = null;

public static void start(final String str1, final String str2) {

syncThreadHandle = svc.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("First string for this thread str1 " + str1
+ " Str2 " + str2);
}

}, 0, 1, TimeUnit.MINUTES);
}

public static void stop(final String str1, final String str2) {
svc.shutdown();
}

//我在另一个类(class)使用这个。

 public static void main(String args[])
{

ProcessFixedRun.start("hi", "hello");
ProcessFixedRun.start("hi agaIN", "hello again");
ProcessFixedRun.stop("hi", "hello");

}

我怎样才能找到那个特定设施的线程。我不擅长线程。任何帮助将不胜感激,谢谢

最佳答案

是否可以将 ScheduleFuture 存储在 map 中,然后根据键取消?

   static ConcurrentMap<String,ScheduledFuture<?>> futures = new ConcurrentHashMap<>();

public static void start(final String str1, final String str2) {

String key = str1+str2;
futures.put(key , syncThreadHandle = svc.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("First string for this thread str1 " + str1
+ " Str2 " + str2);
}

}, 0, 1, TimeUnit.MINUTES));
}

public static void stop(final String str1, final String str2) {
futures.get(str1+str2).cancel(true);
}

key 可以是 str1 或 str2(或两者都是?)。

关于java - 如何仅关闭 ScheduledExecutorService 中选定的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9334269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com