Java 如何使用多线程向队列添加唯一值? 公共静态类multithread扩展线程{ private Queue waitingQue=new LinkedList(); 私家弦式取水口; 公共多线程(字符串str){ 摄入量=str; } 公开募捐{ 模式p=模式编译(\\d”); 匹配器m=p匹配器(进气); while(m.find()){ 字符串温度=m.组(); 如果(!waitingQue.包含(温度)){ 等待时间添加(临时); } } 系统输出打印(waitingQue); } } 公共静态void main(字符串[]args){ 多线程t1=新的多线程(“112236”); t1.start(); 多线程t2=新的多线程(“1122345”); t2.start(); }
我有一个线程类,它接收一个字符串,并检查该字符串是否与特定模式匹配,如果匹配,并且如果队列列表中不存在该字符串,则将添加该字符串。 问题是,我想使用多线程向队列添加唯一值,每个线程启动并进入thread类,向队列添加一个唯一值。 我的预期输出是queue value=“123456”,但是上面的代码只给出“1236”或“12345” 我应该怎么做?问题(不是真的)是Java 如何使用多线程向队列添加唯一值? 公共静态类multithread扩展线程{ private Queue waitingQue=new LinkedList(); 私家弦式取水口; 公共多线程(字符串str){ 摄入量=str; } 公开募捐{ 模式p=模式编译(\\d”); 匹配器m=p匹配器(进气); while(m.find()){ 字符串温度=m.组(); 如果(!waitingQue.包含(温度)){ 等待时间添加(临时); } } 系统输出打印(waitingQue); } } 公共静态void main(字符串[]args){ 多线程t1=新的多线程(“112236”); t1.start(); 多线程t2=新的多线程(“1122345”); t2.start(); },java,multithreading,Java,Multithreading,我有一个线程类,它接收一个字符串,并检查该字符串是否与特定模式匹配,如果匹配,并且如果队列列表中不存在该字符串,则将添加该字符串。 问题是,我想使用多线程向队列添加唯一值,每个线程启动并进入thread类,向队列添加一个唯一值。 我的预期输出是queue value=“123456”,但是上面的代码只给出“1236”或“12345” 我应该怎么做?问题(不是真的)是多线程的每个实例都有自己的队列实例 如果您认为这可能是一个并发性问题,那么事实并非如此,或者至少在这一点上并非如此。要解决并发问题,
多线程的每个实例都有自己的队列实例
如果您认为这可能是一个并发性问题,那么事实并非如此,或者至少在这一点上并非如此。要解决并发问题,更多线程需要共享对相同对象的访问。每个线程都有自己的waitingQueue
而且您的类名有一个打字错误MultiThread
应该是MultiThread
我建议使用ConcurrentLinkedQueue
而不是LinkedList
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();
}