java - Java 使用线程更高效地处理字符串
问题描述
我有这个类使用线程来处理字符串,目前,它是错误的,因为它与每个线程处理相同的数据,我如何转换这个类以更有效地处理字符串
这个类模拟了我面临的问题:
class TransformA implements MyWork.StringWork {
@Override
public String mixStr(String str) {
return str+" Im mixStrA";
}
}
class TransformB implements MyWork.StringWork {
@Override
public String mixStr(String str) {
return str+" Im mixStrB";
}
}
public class MyWork {
private List<String> strResult = new ArrayList<String>();
public MyWork(List<String> startingData) {
this.strResult = startingData;
}
private void processStrings(StringWork f) {
List<String> newData = new ArrayList<String>();
for (String str : strResult) {
newData.add(f.mixStr(str));
}
strResult = newstrResult;
}
public List<String> process(List<StringWork> functions) throws
InterruptedException {
List<Thread> threads = new ArrayList<Thread>();
for (final StringWork f : functions) {
threads.add(new Thread(new Runnable() {
@Override
public void run() {
processStrings(f);
}
}));
}
for (Thread t : threads) {
t.start();
}
for (Thread t : threads) {
t.join();
}
return strResult;
}
public interface StringWork {
public String mixStr(String str);
}
public static void main(String[] args) {
List<MyWork.StringWork> functions = new ArrayList<>();
functions.add(new TransformA());
functions.add(new TransformB());
List<String> startingData = new ArrayList<String>();
startingData.add("XXXX");
startingData.add("YYYY");
startingData.add("AAAA");
startingData.add("BBBB");
startingData.add("CCCC");
startingData.add("DDDDD");
MyWork myWork = new MyWork(startingData);
try {
List<String> result = MyWork.process(functions);
//System.out.println(String.join("\n",result));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
解决方案
推荐阅读
- javascript - 尝试动态加载 React 模块时出错
- android - 导航在 Firebase Messaging Flutter 中不起作用
- angular - 我可以在没有服务器的情况下直接从拦截器返回 HTTP 响应吗?
- c# - 结构到类的通用转换器,反之亦然
- javascript - 如何在 React js 应用程序中添加 onchange 事件
- javascript - 用于 IE11 的带有 Babel 的 Svelte
- java - 为什么我没有打印时会打印
- javascript - 有没有办法在反应组件表上添加边框?
- javascript - $scope.myFunc 不是函数
- jquery - 具有固定标题和特定列数的可滚动(水平和垂直)HTML 表格(与 IE 11 兼容)