Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当没有更多线程处于活动状态时,如何中断循环_Java_Multithreading - Fatal编程技术网

Java 当没有更多线程处于活动状态时,如何中断循环

Java 当没有更多线程处于活动状态时,如何中断循环,java,multithreading,Java,Multithreading,我有一个程序,我初始化并启动一个可变数量的线程。我需要主程序与线程交互,所以我将这些线程放在一个无限循环中。在所有线程都死掉之后,尽管我想找到一种打破循环的方法。下面是我的部分代码: public static void main(String[] args) { //some random initializing for(int i = 1; i <= num; i++){ //p1 is a Runnable Thread t = new Thread(p1

我有一个程序,我初始化并启动一个可变数量的线程。我需要主程序与线程交互,所以我将这些线程放在一个无限循环中。在所有线程都死掉之后,尽管我想找到一种打破循环的方法。下面是我的部分代码:

public static void main(String[] args) {
//some random initializing

for(int i = 1; i <= num; i++){     //p1 is a Runnable
        Thread t = new Thread(p1, "t"+ Integer.toString(i));
        t.start();
} 
while(true){
//do some stuff while threads are active
//not sure what if statement to put here to break loop
}
publicstaticvoidmain(字符串[]args){
//一些随机初始化

对于(inti=1;i而不是暂停while循环,只需连接所有线程。连接方法本质上只是等待线程完成

Thread[] threads = new Thread[num];
for(int i = 1; i <= num; i++){
    Thread t = new Thread(p1, "t"+ Integer.toString(i));
    threads[i] = t;
    t.start();
} 

for(int i = 1; i <= num; i++){
    threads[i].join();
}
Thread[]threads=新线程[num];

对于(inti=1;i而不是暂停while循环,只需连接所有线程。连接方法本质上只是等待线程完成

Thread[] threads = new Thread[num];
for(int i = 1; i <= num; i++){
    Thread t = new Thread(p1, "t"+ Integer.toString(i));
    threads[i] = t;
    t.start();
} 

for(int i = 1; i <= num; i++){
    threads[i].join();
}
Thread[]threads=新线程[num];
对于(inti=1;i您可以在这里使用(因为java 1.5),tt是一种同步辅助工具,它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成

片段:

CountDownLatch signal = new CountDownLatch(num);
...
for(int i = 1; i <= num; i++){     //p1 is a Runnable
        Thread t = new Thread(p1, "t"+ Integer.toString(i),signal);
        t.start();
} 
signal.await();           // wait for all to finish
您可以在这里使用(因为java 1.5),tt是一种同步辅助工具,它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成

片段:

CountDownLatch signal = new CountDownLatch(num);
...
for(int i = 1; i <= num; i++){     //p1 is a Runnable
        Thread t = new Thread(p1, "t"+ Integer.toString(i),signal);
        t.start();
} 
signal.await();           // wait for all to finish

我将创建一个线程数组,稍后检查它们是否完成,然后执行相同的for循环,但也在Threads数组中设置值。最后,在while循环中,我将使用thread的state方法检查是否所有线程都没有完成-

Thread[]threads=新线程[num];

for(int i=1;i我将创建一个线程数组,稍后检查它们是否完成,然后执行相同的for循环,但也设置线程数组中的值。最后,在while循环中,我将使用线程的state方法检查是否所有线程都未完成-

Thread[]threads=新线程[num];

对于(int i=1;i)您可以在这里检查答案。创建threadgroup并使用方法getActiveCount()如何?我没有使用线程组的原因是这用于多线程作业。我只想使用基本的.start()、.wait()和.notify()命令。来组织我的线程。您可以在这里检查答案。创建线程组并使用方法getActiveCount()如何?我没有使用线程组的原因是这是用于多线程作业。我只想使用基本的.start()、.wait()和.notify()命令。来组织我的线程。如果你想在while循环中执行某些操作,连接不会阻止主线程吗?@Bucco确实如此。我假设wile循环只是为了暂停。main方法中的循环实际上与正在运行的线程交互,所以我认为这对我没有帮助。如果你想在while循环中执行某些操作op,join不会阻止主线程吗?@Bucco确实如此。我假设wile循环只是为了暂停。main方法中的循环实际上与正在运行的线程交互,所以我认为这对我没有帮助。+1.另外,如果你想在等待时做些事情(如op所愿),你可以去。
while(latch.getCount()>0){do stuff}
+1。另外,如果您想在等待时做一些事情(如OP所愿),您可以去。
while(latch.getCount()>0){do stuff}
谢谢这看起来我现在应该可以让它工作了。谢谢这看起来我现在应该可以让它工作了。