【发布时间】:2017-04-20 13:06:14
【问题描述】:
我有一段这样的代码:
while(){
x = jdbc_readOperation();
y = getTokens(x);
jdbc_insertOperation(y);
}
public List<String> getTokens(String divText){
List<String> tokenList = new ArrayList<String>();
Matcher subMatcher = Pattern.compile("\\[[^\\]]*]").matcher(divText);
while (subMatcher.find()) {
String token = subMatcher.group();
tokenList.add(token);
}
return tokenList;
}
据我所知,当一个线程被 I/O 或网络阻塞时,使用多线程可以节省时间。在此同步操作中,每个步骤都必须等待其上一步完成。我想要的是最大化 getTokens() 上的 cpu 利用率。
我的第一个想法是将getTokens()放在一个类的run方法中,并创建多个线程。但我认为它不会起作用,因为它似乎无法通过在纯计算操作上使用多个线程来获得性能优势。
在这种情况下,采用多线程是否有助于提高性能?如果是这样,我该怎么做?
【问题讨论】:
-
请问
some_stuff()正在做的“事情”是否可以并行完成?或者,只有一个线程这样做才有意义? -
没有通用的方法可以做到这一点。这完全取决于
some_stuff()所做的事情以及这段代码在整个程序中的使用方式。 -
抱歉有歧义,some_stuff() 是一个字符串处理函数,唯一的参数来自读取操作的结果。我已经在上面更新了。但我不确定在这种情况下是否可以“并行”完成,您能否详细说明一下?谢谢。
-
如果
some_stuff()完全依赖x,而y完全依赖some_stuff(),那么并行化这三个步骤是无法提高性能的。可能some_stuff()本身可以在内部并行化,但只有你自己知道。 -
divText 的内容(或者 x,如果你愿意的话) - getTokens 方法的输入是什么样的?是用空格还是其他符号分隔的单词?
标签: java multithreading thread-safety threadpool