相关疑难解决方法(0)

等到所有线程完成他们在java中的工作

我正在编写一个包含5个线程的应用程序,它们可以同时从Web获取一些信息,并在缓冲类中填充5个不同的字段.
当所有线程完成工作时,我需要验证缓冲区数据并将其存储在数据库中.
我该怎么做(当所有线程完成工作时收到警报)?

java multithreading wait

80
推荐指数
7
解决办法
13万
查看次数

76
推荐指数
6
解决办法
12万
查看次数

如何在不关闭Executor的情况下等待ThreadPoolExecutor中的所有任务完成?

我无法使用shutdown(),awaitTermination()因为有可能在等待时将新任务添加到ThreadPoolExecutor中.

所以我正在寻找一种方法,等待ThreadPoolExecutor清空它的队列并完成所有任务而不停止在该点之前添加新任务.

如果它有任何区别,这适用于Android.

谢谢

更新:几周后重新访问后,我发现在这种情况下修改后的CountDownLatch对我来说效果更好.我会保留答案标记,因为它更适用于我的要求.

java multithreading android wait threadpoolexecutor

60
推荐指数
3
解决办法
6万
查看次数

等待多个线程在Java中完成

在程序执行过程中,会启动许多线程.线程数量取决于用户定义的设置,但它们都使用不同的变量执行相同的方法.

在某些情况下,执行中需要清理,其中一部分是停止所有线程,我不希望它们立即停止,我只是设置一个他们检查的变量来终止它们.问题是它可以在线程停止前最多1/2秒.但是,我需要确保在清理可以继续之前所有线程都已停止.清理是从另一个线程执行的,所以从技术上讲,我需要这个线程来等待其他线程完成.

我想到了几种方法,但它们似乎都过于复杂.我希望有一些方法可以等待一组线程完成.有这样的事吗?

谢谢.

java multithreading synchronization

35
推荐指数
4
解决办法
6万
查看次数

Java与Golang的WaitGroup等效

Golang有一种叫做a的东西WaitGroup,类似于Java中的a CompletionService或a CountDownLatch或a Semaphore或后者的某种组合。

我不完全确定如何在Java中实现WaitGroup。我可以想象一个带有某种Poison消息的自定义CompletionService将成为要走的路(因为队列不能说何时完成),但是也许有更好的并发数据结构/锁?

编辑我在下面发布了一个可能的解决方案Semaphore,我认为它比使用更加类似thread.join

java go

6
推荐指数
2
解决办法
2088
查看次数

完成所有线程后打印数据

我想在我创建的2个线程完成运行方法之后才打印数组.我怎么能这样做?

java multithreading

2
推荐指数
2
解决办法
8456
查看次数

全执行时间多线程Java

我想测量完整的执行时间(当所有线程都完成时)。但是我的代码在这里行不通,因为当主方法结束时,其他线程仍在运行,因为它们要比主方法花费更长的时间。

class Hello extends Thread {
   @Override
   public void run() {
      for (int i = 0; i < 5; i++) {
         System.out.println("Hello");
         try {
            Thread.sleep(500);
         } catch (final Exception e) {
         }
      }
   }

}

class Hi extends Thread {
   @Override
   public void run() {
      for (int i = 0; i < 5; i++) {
         System.out.println("Hi");
         try {
            Thread.sleep(500);
         } catch (final Exception e) {
         }
      }
   }
}

public class MultiThread {
   public static void main(String[] args) {
      final …
Run Code Online (Sandbox Code Playgroud)

java multithreading execution nanotime

2
推荐指数
1
解决办法
65
查看次数

多线程、并发和睡眠未按预期工作

我有一个非常简单的场景。以下方法尝试访问锁,等待 1 秒并最终释放锁。

private final Lock lock = new ReentrantLock();

public void lockAndWait() {

    logger.info("I {} am here", Thread.currentThread().getName());

    lock.lock();

    try {

        logger.info("I {} got the lock", Thread.currentThread().getName());

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

    } finally {
        lock.unlock();
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在运行以下测试:

@Test
public void lockTest() {
    for (int i = 0; i < 10; i++) {
        new Thread(() -> lockAndWait()).start();
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到以下日志输出:

12-10-2023 17:11:04 [Thread-2       ] INFO   I Thread-2 am here
12-10-2023 17:11:04 …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading sleep java-17

2
推荐指数
1
解决办法
45
查看次数