使1个线程等待,直到另一个线程完成任务

时间:2014-02-20 20:37:13

标签: java multithreading

我有一个设置,其中我有2个不同的线程组执行2个单独的任务(对于那些想知道,组1计算SHA-256字符串的哈希值,第二组将这些哈希值与字典中的哈希值进行比较)。逻辑上我想要发生的是创建所有组2线程,让它们等待,然后当每个组1线程计算散列时,所有组2线程“唤醒”并检查计算的散列以检查匹配。这是我使用名为“shared”

的计算哈希的共享字典的第2组线程的代码
private static class Group2Th implements Runnable {
    private String dbUser;
    private String dbHashedPass;
    private SharedDict shared;
    public Group2Th(String dbUser, String dbHashedPass, SharedDict shared) {
        this.dbUser = dbUser;
        this.dbHashedPass = dbHashedPass;
        this.shared = shared;
    }

    public void run() {
        System.out.println("Hello from G2 Thread: " + this.dbUser + " ==> " + this.dbHashedPass);
    }
}

我怎样才能使这个线程等到哈希的“共享”字典中的某些内容被添加?

2 个答案:

答案 0 :(得分:1)

这看起来像是典型的生产者/消费者计划。它通常通过在生产者线程和消费者线程之间共享BlockingQueue来解决。

生产者线程将值放入队列中,而消费者线程从队列中获取它们。消费者线程被队列阻塞,直到元素可用。如果队列包含太多元素,则生产者线程也可以被队列阻塞。

答案 1 :(得分:0)

使用BlockingQueue我们可以完成这项任务。根据Java Doc “一个队列,它还支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中的空间可用。” < / p>

更多信息enter link description here