gpt4 book ai didi

java - Java中断线程的更好方法

转载 作者:行者123 更新时间:2023-12-01 06:24:01 24 4
gpt4 key购买 nike

我用Java编写了一个类:

public class Main {
public static boolean firstRunning = true;
public static void main(String[] args) {
(new Thread(){
public void run(){
secondFunction();
}
}).start();
firstFunction();
}

public static void firstFunction()
{
for(int i = 0; i < 10 && firstRunning; i++)
{
try{Thread.sleep(1000);} catch(Exception e){}
System.out.println("first - "+i);
}
return;
}

public static void secondFunction(){
try{Thread.sleep(3000);} catch(Exception e){}
firstRunning = false;
for(int i = 0; i < 10; i++)
{
try{Thread.sleep(700);} catch(Exception e){}
System.out.println("second - "+i);
}
}
}

我在新线程中调用 secondFuntion(),然后在主线程 中开始执行 firstFuntion()。在执行secondFuntion()中的Thread.sleep(3000)之后,我想让secondFunction()接管 >主线程,我将 boolean 标志firstRunning设置为false,并使用return语句取消主线程的执行。

这种方法对我有用,但是有没有更优雅的方法来做同样的事情?

编辑

代码的输出是

first - 0
first - 1
first - 2
second - 0
second - 1
second - 2
second - 3
second - 4
second - 5
second - 6
second - 7
second - 8
second - 9

最佳答案

如果你只是想让主线程退出,那么这是最简单的方法。

但通常,您有更复杂/不同的需求。我的猜测是,您尝试解决不同的问题,这是您的第一个解决方案。除非您告诉我们您最初的问题,否则我们无法告诉您什么是好的解决方案。

如果您只想让 2 个线程共享某些内容(即不同时使用它),则可以使用锁(请参阅 Java 7 docs )。

伪代码:

  • 主线程创建锁
  • 主线程创建第二个线程并将锁传递给它
  • 第一个函数尝试获取循环内部的锁。当成功时,它会运行一次循环体并释放锁。
  • 然后线程 2 使用锁来确保主线程在执行工作时阻塞

关于java - Java中断线程的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24571939/

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