【发布时间】:2014-05-19 07:31:32
【问题描述】:
我正在阅读有关线程池的信息,发现线程创建被认为是一个昂贵的过程。这抵消了我的直觉,我决定对其进行测试:
public static void main(String[] args) {
long start = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
new Thread(new Runnable() {
@Override
public void run() {
}
}).start();
}
long end = System.currentTimeMillis();
System.out.println(end - start + "ms");
}
这会在我的系统上打印696ms。所以创建一个线程的时间接近0.69毫秒。为什么这被认为很慢?
编辑:
public class Test {
static int a = 1;
static long start;
static void setA() {
++a;
if(a>=1000) {
long end = System.currentTimeMillis();
System.out.println(end - start + "ms");
}
}
public static void main(String[] args) {
start = System.currentTimeMillis();
for (int i = 0; i <= 1000; ++i) {
new Thread(new Runnable() {
@Override
public void run() {
setA();
}
}).start();
}
}
}
这打印729ms。
【问题讨论】:
-
好吧,你只测量了主线程所花费的时间。您还没有等待线程真正开始......另外,一毫秒在计算中是相当长的时间。
-
@JonSkeet 请查看修改后的代码。会说现在开始考虑的实际时间?
-
@JonSkeet
Also, a millisecond is a pretty long time如果我有 100 个线程,我会通过转换为线程池来保存100ms。对我来说,这种优化对大多数企业应用程序没有意义。 -
@KshitizSharma:这取决于 - 如果您正在考虑在服务器中为每个请求创建一个新线程,那么您基本上是在说每秒处理 1000 个请求,您将花费 所有创建线程的时间。
标签: java multithreading performance threadpool