【发布时间】:2016-06-07 20:08:05
【问题描述】:
我正在尝试通过多线程和单线程计算 100 个数字。由于 synchronized 关键字一次只允许一个线程(有点像单个线程),那么如果忽略创建和同步线程的耗时影响,下面这两个方法应该具有大致相同的运行时间?
使用同步的多线程:
public synchronized static void increment() {
sum++;
}
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 50; i++) {
increment();
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 50; i++) {
increment();
}
}
});
t1.start();;
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(sum);
单线程:
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
sum++
}
System.out.println(sum);
}
【问题讨论】:
-
第二种方法中的
t1是什么?你的意思是t3? -
是的。我编辑了它。 @AndyTurner
-
"使用同步的单线程:" 实际上,这是多线程的。你有主线程和
t3。而且你没有使用synchronized。 -
我的错。请看我的编辑。 @AndyTurner
-
对于更大的计数和单线程情况,JIT 可以完全消除循环并打印出计数。对于多线程的情况,这是做不到的,所以多线程的代码会慢很多。
标签: java multithreading semaphore synchronized