问题描述
我有这个使用线程处理字符串的类,目前,它处理相同的数据是错误的
对于每个线程,我如何转换此类以更有效地处理字符串
这个类模拟我面临的问题:
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();
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)