有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中的多线程线程排序。

在java中,我们如何做到这一点:

  1. 多个线程创建并写入一个文件
  2. 由于任何线程都可以写入该文件(通过获取锁),因此线程写入的顺序就不存在了

创建的线程数将超过40个。如何在不影响线程顺序的情况下转储线程

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    嗯,线程实际上没有顺序,所以您需要通过编程为它们创建某种类型的池队列

    虽然我不知道Java1.7是否在Java中添加了新的东西。同时上课。。这可能会帮你实现你想要的

    但对于Java1.6及以下版本,必须有一个队列来逐个管理线程,以维持JVM不会执行的实际顺序

  2. # 2 楼答案

    根据您的描述,最简单的解决方案是让线程保存它们的结果,并让另一个线程按照您想要的顺序写入它们。e、 g

    int threads = Runtime.getRuntime().availableProcessors();
    ExecutorServer es = Executors.newFixedThreadPool(threads);
    
    List<Future<String>> results = new ArrayList<>();
    for (int i = 0; i < tasks; i++)
         results.add(es.submit(new Callable<String>() {
              public String call() {
                  // task which returns a String
              }
         });
    try (PrintWriter fw = new PrintWriter("output.txt")) {
        for (Future f : results)
            fw.println(f.get());
    }
    

    如你所见

    • 任务可以按任何顺序执行,但结果会按预期顺序写入文件
    • 一次执行的任务数量仅限于逻辑CPU的实际数量