如何使用多线程将唯一的值添加到队列?

时间:2018-08-03 19:24:29

标签: java multithreading

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” 我该怎么办?

1 个答案:

答案 0 :(得分:0)

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

如果您建议这可能是并发问题,那不是,或者至少现在不是。为了解决并发问题,更多线程需要共享对同一对象的访问。