java - Java 中的多线程控制

标签 java multithreading synchronization thread-safety cyclicbarrier

我有一个“可运行”线程,它正在启动几个“可调用”线程,并且我想在上述所有线程完成其工作时显示结果。

最好的方法是什么?

我的代码如下

Connector.java(启动可运行线程)

  public class Connector {
                      private static void anyFileConnector() {
                    // Starting searching Thread
                        ExecutorService executor = Executors.newFixedThreadPool(100);
                        executor.submit(traverse, executor);
//HERE I WANT MY ALL SEARCH RESULTS/OUTPUT : CURRENTLY IT IS STARTING OTHER THREADS AND NOT SHOWING ME ANY RESULTS BECAUSE NONE OF THEM WAS FINISHED.(IN CONSOLE, I WAS ABLE TO SEE RESULTS FROM ALL THE THREADS
        setSearchResult(traverse.getResult());

                    executor.shutdown();
            }
    }

Traverse.java(可运行线程) 我正在使用 ExecutorCompletionService 来处理它......但它没有产生任何区别。 :(

public class Traverse implements Runnable {
    public void run() {

    ExecutorService executor = Executors.newFixedThreadPool(100);
    ExecutorCompletionService<List<ResultBean>> taskCompletionService =
            new ExecutorCompletionService<List<ResultBean>>(executor);
    try (DirectoryStream<Path> stream = Files
            .newDirectoryStream(dir)) {
                Search newSearch = new Search();
                taskCompletionService.submit(newSearch);
     }
    list.addAll(taskCompletionService.take().get());
    }
}

Search.java(可调用线程)

public class Search implements Callable<List<ResultBean>> {
 public List<ResultBean> call() {
        synchronized (Search.class) {
// It will return results
            return this.search();
        }
    }

}

最佳答案

选择CyclicBarrier,您将能够实现这一目标。 一旦所有线程完成其工作,循环屏障就会执行任务,您可以在此处打印结果。

检查CyclicBarrier的工作情况:http://javarevisited.blogspot.com/2012/07/cyclicbarrier-example-java-5-concurrency-tutorial.html

关于java - Java 中的多线程控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18043538/

相关文章:

java - 错误 : cannot access Task class file for bolts

java - 了解 Java 9+ 上的部署

java - getParcelableExtra 返回空 NFC 标签

c++ - 我如何在 std::atomic<T> 上实现一个简单的自旋锁,以便编译器不会优化它?

并发多线程

php - 如何在两个本地主机之间同步 mysql 数据库?

java - 在 Java 中模拟延迟

java - 如何在 Java 中实现基于线程 UDP 的服务器?

asp.net - 不确定用于同步的 SQL Server 锁的类型

java - 为什么多线程 Java 代码的行为与单线程类似?