gpt4 book ai didi

java - 对于多线程共享资源,同步是更好的选择吗?

转载 作者:行者123 更新时间:2023-12-03 13:11:48 24 4
gpt4 key购买 nike

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(); insert1(); (调用的普通方法)并注释执行线程的startThread()会给我结果,如代码所示。

2.现在评论insert(); insert1();并使用startThread()(执行线程)给我结果,如代码所示。

3.现在我同步increment()给我输出的时间= 35738 200000000

如上,同步避免了共享资源的访问,但是另一方面,它花费了大量的时间来处理。

那么,如果这种同步降低了性能,又有什么用呢?

最佳答案

有时,您只希望同时进行两项或多项操作。想象一下,在长时间任务运行时,聊天应用程序的服务器或更新GUI的程序可以使用户知道正在进行的处理

关于java - 对于多线程共享资源,同步是更好的选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30154336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com