当前位置: 首页 > 知识库问答 >
问题:

至少完成一个线程时如何启动线程

容寒
2023-03-14

我有4条线。每个人每x秒打印给定的字母x次。任务是一次启动3个线程,在至少一个前一个线程完成时启动第四个线程。我不知道如何通知最后一个线程在适当的时间运行。

共有1个答案

冀弘厚
2023-03-14

你可以使用信号灯。前三个线程将获取所有许可,当第一个线程释放许可时,第四个线程将获取并运行。

public static void main(String [] args) throws IOException {
    Semaphore semaphore = new Semaphore(3, true);
    
    
    Runnable a = new Runnable() {   
        @Override
        public void run() {
            try {
                semaphore.acquire();
                for (int i = 0; i < 50; i++) {
                    System.out.println("A");
                }                   
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                semaphore.release();
            }
        }
    };
    Runnable b = new Runnable() {   
        @Override
        public void run() {
            try {
                semaphore.acquire();
                for (int i = 0; i < 50; i++) {
                    System.out.println("B");
                }                   
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                semaphore.release();
            }
        }
    };
    Runnable c = new Runnable() {   
        @Override
        public void run() {
            try {
                semaphore.acquire();
                for (int i = 0; i < 50; i++) {
                    System.out.println("C");
                }                   
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                semaphore.release();
            }
        }
    };
    
    Runnable d = new Runnable() {   
        @Override
        public void run() {
            try {
                semaphore.acquire();
                System.out.println("D");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                semaphore.release();
            }
        }
    };
    
    ExecutorService exec = Executors.newFixedThreadPool(5);
    exec.execute(a);
    exec.execute(b);
    exec.execute(c);
    exec.execute(d);
}
 类似资料:
  • 问题内容: 程应在同一瞬间开始。我了解,如果你这样做,则下次执行之前需要花费几毫秒的时间。 可能还是不可能?线程应该在同一瞬间开始。我知道,如果你执行,则下次执行thread2.start()需要几毫秒。 这是可能的还是不可能的? 问题答案: 要完全同时(至少尽可能好)启动线程,可以使用CyclicBarrier: 这不必是,你也可以使用 这仍然无法确保它们已正确启动 在其他平台上,确切地说启动线

  • 问题内容: 我是python和线程的新手。我已经编写了充当网络爬虫的python代码,并在网站中搜索特定的关键字。我的问题是,如何使用线程同时运行类的三个不同实例。当实例之一找到关键字时,所有三个实例都必须关闭并停止爬网。这是一些代码。 如何使用线程让Crawler同时执行三个不同的爬网? 问题答案: 似乎没有一种(简单的)方法可以终止Python中的线程。 这是一个并行运行多个HTTP请求的简单

  • 我一直在尝试写一些java应用程序。这个应用程序想要运行的是处理一个文本文件。 但是,输入文本文件很大(超过200MB),我尝试将200MB拆分为四个拆分文件(每个50MB) 所以,每一个都只需要0.5秒,但是用这种线性运行,每一个也需要2秒。(worker1+0.5s,worker2+0.5s,worker3+0.5s,worker4)如果我可以同时运行4个线程,我预计这个应用程序只需要0.5秒

  • 问题内容: 有什么方法可以简单地等待所有线程处理完成?例如,假设我有: 如何更改此方法,以便该方法在注释处暂停直到所有线程的方法退出?谢谢! 问题答案: 你将所有线程放入数组中,全部启动,然后进行循环 每个连接将阻塞,直到相应的线程完成为止。线程的完成顺序可能不同于你加入线程的顺序,但这不是问题:退出循环时,所有线程均已完成。

  • 我试着运行一个程序,使用线程显示带有数字的乘法、除法、加法和减法表。 但是我希望数字被乘以或相加等。由用户选择。 也就是说,程序应该在用户为每个操作选择一个数字后运行,然后显示结果。

  • 但这一个也不起作用。正确的答案是加入线程并删除2个睡眠: 我的问题是:为什么我的答案都不能被接受?我的实验室领导问,但他不能给我一个答案。在家里编写了测试代码,它似乎工作得很好。提前感谢您的帮助!