我试图让每个线程访问for循环的一个项目,而另一个线程访问下一个项目。我想使用多个线程来完成这个任务,创建的多个线程的数量将由用户输入。我已经使用executorservice和streams完成了这个任务。我想使用简单的线程来完成这个任务。下面是正确的吗?有更好的方法吗?
Map<String, String> fileMap = new HashMap<>();
fileMap.put("Age", "Age is not remotely associated with it.");
fileMap.put("Gender", "Gender plays a role but not that important.");
fileMap.put("Money", "People do not believe but this is the only factor that matters.");
Runnable myRunnable = new Runnable(){
public void run(){
for (Map.Entry<String, String> entry : fileMap.entrySet()) {
synchronized(this){
int counter = 0;
Pattern p = Pattern.compile("not");
Matcher m = p.matcher(entry.getValue());
while (m.find()) {
counter++;
}
System.out.println("File Name: " + entry.getKey());
System.out.println("Count: " + counter);
System.out.println(Thread.currentThread().getName());
}
}
}
};
int n = Integer.parseInt(args[0]);
for (int x=0; x<n; x++)
{
Thread temp= new Thread(myRunnable, "Thread #" + x);
temp.start();
System.out.println("Started Thread:" + x);
}
另外,有没有可能因为前一个线程已经计算了值,所以线程不返回到前一个项目?任何帮助都将不胜感激。谢谢
3条答案
按热度按时间iqxoj9l91#
下面是您的问题的一个解决方案。它解析线程名称以提供索引,并使用final数组处理将数据传递到线程中的操作。
ubbxdtey2#
它可以通过abacus-common的paralledStream实现
如果你想学习如何自己编写多线程代码,这里有一个简单的例子:
声明:我是算盘的开发者。
vngu2lb83#
下面使用您的问题说明了使用原始线程迭代数组来并行化循环的标准方法。