【发布时间】:2015-07-21 04:05:21
【问题描述】:
public class MyResource {
private int count = 0;
void increment() {
count++;
}
void insert() { // incrementing shared resource count
for (int i = 0; i < 100000000; i++) {
increment();
}
}
void insert1() { //incrementing shared resource count
for (int i = 0; i < 100000000; i++) {
increment();
}
}
void startThread() {
Thread t1 = new Thread(new Runnable() { //thread incrementing count using insert()
@Override
public void run() {
insert();
}
});
Thread t2 = new Thread(new Runnable() { //thread incrementing count using insert1()
@Override
public void run() {
insert1();
}
});
t1.start();
t2.start();
try {
t1.join(); //t1 and t2 race to increment count by telling current thread to wait
t2.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
void entry() {
long start = System.currentTimeMillis();
startThread(); //commenting insert(); insert1() gives output as time taken = 452(approx) 110318544 (obvious)
// insert(); insert1(); //commenting startThread() gives output as time taken = 452(approx) 200000000
long end = System.currentTimeMillis();
long time = end - start;
System.out.println("time taken = " + time);
System.out.println(count);
}
}
程序入口点来自 entry() 方法。
1.仅使用 insert();插入1(); (普通方法调用)和注释 startThread()(执行线程)给我的结果如代码所示。
2.现在评论 insert();插入1();并使用 startThread()(执行线程)给我结果,如代码所示。
3.现在我同步增量()给我输出的时间 = 35738 200000000
如上所述,同步避免了共享资源的访问,但另一方面需要大量时间来处理。
如果同步会降低性能,那还有什么用呢?
【问题讨论】:
标签: java multithreading synchronized