首页 > 解决方案 > 如何使用多线程向队列添加唯一值?

问题描述

public static class MutiThread extends Thread {

private Queue<String> waitingQue = new LinkedList<>();
private String intake;
public MutiThread (String str) {
    intake = str;
}

public void run() {
    Pattern p =Pattern.compile("\\d");
    Matcher m=p.matcher(intake);
    while (m.find()){
        String temp = m.group();
        if (!waitingQue.contains(temp)){
            waitingQue.add(temp);
        }
    }
    System.out.println(waitingQue);
}


}
 public static void main(String[] args) {
   MutiThread t1 = new MutiThread("112236");
   t1.start();
   MutiThread t2 = new MutiThread("1122345");
   t2.start();
}

我有一个线程类,它接受一个字符串并检查该字符串是否匹配某个模式,如果是,如果它在队列列表中不存在,它将被添加。问题是,我想使用多线程向队列添加唯一值,每个线程启动并进入线程类并向队列添加一个唯一值。我的预期输出是队列值=“123456”但是上面的代码只给了我“1236”或“12345”我应该怎么做?

标签: javamultithreading

解决方案


问题(不是真的)是每个实例MultiThread都有自己的队列实例。

如果您建议这可能是一个并发问题,那么它不是,或者至少目前不是。为了有并发问题,更多的线程需要共享对相同对象的访问。


推荐阅读