如何使主线程等待所有线程完成

瑞安·科汉(Ryan Cohan)

我有一个程序,其中创建了10个线程来运行。我希望主线程能够等到一切都完成之后再完成。我正在尝试使用.join命令,但它似乎不起作用。另外,我正在尝试显示所有线程的运行时,但是运行不正常。下面是我的代码。

//File: CohanThread.java
//Author: Ryan A. Cohan
//Date: August 4, 2016
//Purpose: To create, run, and analyze a thread based program. IOBound runs IO intensive
//operations in the form of printing 1000 times to the console. CPUBound runs CPU
//intensive operations by computing an equation and printing 1000 times.

package cohanthread;

import java.text.*;

public class CohanThread{

    public static void main(String args[]) throws InterruptedException{
        NumberFormat formatter = new DecimalFormat("#0.00000");

        IOBound io1 = new IOBound();
        IOBound io2 = new IOBound();
        IOBound io3 = new IOBound();
        IOBound io4 = new IOBound();
        IOBound io5 = new IOBound();

        CPUBound cpu1 = new CPUBound();
        CPUBound cpu2 = new CPUBound();
        CPUBound cpu3 = new CPUBound();
        CPUBound cpu4 = new CPUBound();
        CPUBound cpu5 = new CPUBound();

        long scheduleStart = System.currentTimeMillis();
        io1.start();
        io2.join();
        io3.join();
        io4.join();
        io5.join();
        cpu1.join();
        cpu2.join();
        cpu3.join();
        cpu4.join();
        cpu5.join();
        long scheduleEnd = System.currentTimeMillis();
        System.out.println("Runtime of all threads: " + formatter.format((scheduleEnd - scheduleStart) / 1000d));
        System.out.println("Processes complete.");
    }
}

class IOBound extends Thread{
    NumberFormat formatter = new DecimalFormat("#0.00000");
    @Override
    public void run(){
        long start = System.currentTimeMillis();
        for(int i = 0; i < 1000; i++){
            System.out.println("Thread number is: " + i);
        }
        long end = System.currentTimeMillis();
        System.out.println("IO Thread runtime: " + formatter.format((end - start) / 1000d));
    }
}

class CPUBound extends Thread{
    NumberFormat formatter = new DecimalFormat("#0.00000");
    @Override
    public void run(){
        String binary = "";
        long start = System.currentTimeMillis();
        for(int i = 0; i < 1000; i++){
            while(i > 0){
                int remainder = i % 2;
                binary = remainder + binary;
                i = i / 2;
            }
            System.out.println("Binary number: " + binary);
            long end = System.currentTimeMillis();
            System.out.println("CPU Thread runtime: " + formatter.format((end - start) / 1000d));
        }
    }
}
克洛斯

联接不会启动计算,您必须启动所有线程并使用联接来等待完成...

https://docs.oracle.com/javase/tutorial/essential/concurrency/join.html

使用这个主要...。

public static void main(String args[]) throws InterruptedException{
    NumberFormat formatter = new DecimalFormat("#0.00000");

    IOBound io1 = new IOBound();
    IOBound io2 = new IOBound();
    IOBound io3 = new IOBound();
    IOBound io4 = new IOBound();
    IOBound io5 = new IOBound();

    CPUBound cpu1 = new CPUBound();
    CPUBound cpu2 = new CPUBound();
    CPUBound cpu3 = new CPUBound();
    CPUBound cpu4 = new CPUBound();
    CPUBound cpu5 = new CPUBound();

    long scheduleStart = System.currentTimeMillis();
    io1.start();
    io2.start();
    io3.start();
    io4.start();
    io5.start();
    cpu1.start();
    cpu2.start();
    cpu3.start();
    cpu4.start();
    cpu5.start();


    io1.join();
    io2.join();
    io3.join();
    io4.join();
    io5.join();
    cpu1.join();
    cpu2.join();
    cpu3.join();
    cpu4.join();
    cpu5.join();
    long scheduleEnd = System.currentTimeMillis();
    System.out.println("Runtime of all threads: " + formatter.format((scheduleEnd - scheduleStart) / 1000d));
    System.out.println("Processes complete.");
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

让主线程等待,直到所有线程结束

来自分类Dev

我如何等待Indy线程池中的所有线程完成

来自分类Dev

如何在Haskell中强制主线程等待其所有子线程完成

来自分类Dev

等待所有线程

来自分类Dev

等待所有线程

来自分类Dev

ExecutorService的shutdown()不会等待所有线程完成

来自分类Dev

C#等待直到所有线程完成执行

来自分类Dev

等待所有线程完成在ConcurrentDictionary中的写入

来自分类Dev

Kotlin进程等待所有线程完成?

来自分类Dev

Java Scheduled Executor Service等待所有线程完成

来自分类Dev

node.js:等待所有线程完成

来自分类Dev

如何等待方法中创建的所有线程

来自分类Dev

如何等待所有线程关闭?

来自分类Dev

在循环中创建线程并等待所有线程完成/中止

来自分类Dev

如何确保在主线程停止之前所有线程都已停止?

来自分类Dev

所有线程完成运行后,如何运行代码?

来自分类Dev

完成所有线程后如何退出程序?

来自分类Dev

C#.Net-如何使应用程序等待,直到在Library中创建的所有线程完成

来自分类常见问题

Java等待所有线程完成,然后再打印一些信息

来自分类Dev

等待所有线程计时器回调完成的安全方法

来自分类Dev

当所有线程完成执行后,如何运行我的最后一个线程?

来自分类Dev

如何立即杀死所有线程

来自分类Dev

确保所有等待线程完成

来自分类Dev

sched_setscheduler是用于所有线程还是主线程?

来自分类Dev

暂停其他线程中的线程,然后等待所有线程暂停

来自分类Dev

为什么不是所有线程都完成了?

来自分类Dev

从Java方法返回完成所有线程之前

来自分类Dev

当所有线程完成工作时获取通知

来自分类Dev

Ruby:使用join和ThreadsWait.all_waits等待所有线程完成-有什么区别?

Related 相关文章

  1. 1

    让主线程等待,直到所有线程结束

  2. 2

    我如何等待Indy线程池中的所有线程完成

  3. 3

    如何在Haskell中强制主线程等待其所有子线程完成

  4. 4

    等待所有线程

  5. 5

    等待所有线程

  6. 6

    ExecutorService的shutdown()不会等待所有线程完成

  7. 7

    C#等待直到所有线程完成执行

  8. 8

    等待所有线程完成在ConcurrentDictionary中的写入

  9. 9

    Kotlin进程等待所有线程完成?

  10. 10

    Java Scheduled Executor Service等待所有线程完成

  11. 11

    node.js:等待所有线程完成

  12. 12

    如何等待方法中创建的所有线程

  13. 13

    如何等待所有线程关闭?

  14. 14

    在循环中创建线程并等待所有线程完成/中止

  15. 15

    如何确保在主线程停止之前所有线程都已停止?

  16. 16

    所有线程完成运行后,如何运行代码?

  17. 17

    完成所有线程后如何退出程序?

  18. 18

    C#.Net-如何使应用程序等待,直到在Library中创建的所有线程完成

  19. 19

    Java等待所有线程完成,然后再打印一些信息

  20. 20

    等待所有线程计时器回调完成的安全方法

  21. 21

    当所有线程完成执行后,如何运行我的最后一个线程?

  22. 22

    如何立即杀死所有线程

  23. 23

    确保所有等待线程完成

  24. 24

    sched_setscheduler是用于所有线程还是主线程?

  25. 25

    暂停其他线程中的线程,然后等待所有线程暂停

  26. 26

    为什么不是所有线程都完成了?

  27. 27

    从Java方法返回完成所有线程之前

  28. 28

    当所有线程完成工作时获取通知

  29. 29

    Ruby:使用join和ThreadsWait.all_waits等待所有线程完成-有什么区别?

热门标签

归档