gpt4 book ai didi

java - 多线程概念

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

我现在正在学习多线程概念。我可以在处理程序和 Runnable() 的帮助下运行单个线程。我希望我的代码运行两个线程,例如线程 1 运行 method1(),线程 2 运行 method2()。 Thread1 应运行 2 秒,然后 hibernate 1 秒。同时,线程2应该唤醒并运行1秒。同样,thread1 应运行 2 秒。这个过程应该持续进行。我正在 Android 中执行此操作。

这个问题可能看起来很直接,但我没有其他办法,除了在这里发布问题,因为我已经在这个网站上浏览了很多教程和问题。没有帖子适合我的背景。任何建议将不胜感激。提前致谢。

最佳答案

您可以使用ScheduledThreadPoolExecutor来实现这一点,通过它您可以实现任务的并行执行。安排任务的小示例:

//creates a thread pool of size 2
int poolSize = 2;
// creates ScheduledThreadPoolExecutor object with number of thread 2
ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(poolSize);

//starts executing after 1 second
ScheduledFuture<Callable-Type> sf = stpe.schedule(new TaskOne(), 1,TimeUnit.SECONDS);

//starts executing after 2 seconds
ScheduledFuture<Callable-Type> sf1 = stpe.schedule(new TaskTwo(), 2,TimeUnit.SECONDS);

您可以按如下方式定义您的任务:

class TaskOne implements Callable<Callable-Type> {
@Override
public Callable-Type call() throws Exception {
//DO YOUR WORK HERE
return callable-type;
}
}

class TaskTwo implements Callable<Callable-Type> {
@Override
public Callable-Type call() throws Exception {
//DO YOUR WORK HERE
return callable-type;
}
}

使用 ScheduledThreadPoolExecutor 相对于 Timer 的优点是:

  • 定时器仅创建一个线程来执行定时器任务。预定线程池通过让您提供多个线程来执行延迟任务和定期任务来解决此限制。
  • Timer 的另一个问题是,如果 TimerTask 抛出未经检查的异常,它的表现会很差。 Timer 线程不会捕获异常,因此从 TimerTask 抛出的未经检查的异常会终止计时器线程。

引用:Java 并发实践

关于java - 多线程概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18610890/

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