【发布时间】:2017-06-26 01:52:57
【问题描述】:
我正在学习线程安全,但在网上搜索时似乎无法找到明确的答案。
这之间有什么区别和影响:
synchronized (lock) {
new Thread () {
public void run() {
// critical section
}
}.start();
}
还有这个:
new Thread () {
public void run() {
synchronized (lock) {
// critical section
}
}
}.start();
为了给你一个上下文,我正在编写一个小型实验室,方法是“每个请求一个线程”,所以每次调用该方法时,上述方法中的任何一个都会被执行到“关键部分”执行它是自己的线程。
那么在线程内部或外部加锁有影响吗?每个线程“继承”锁还是必须在每个线程内才能完全线程安全?
【问题讨论】:
-
第一个没用。
-
第一个在
thread.start之后释放锁,第二个是正确的等待run method中的所有代码完成后再释放锁 -
太棒了!谢谢:)
-
为什么要在自己的线程中运行临界区?临界区的要点是只能同时在其中一个线程,那么为什么不在您所在的线程中运行该部分,而不是一个新线程呢?新线程没有任何好处,而且有很多缺点(需要更长的时间、更多的内存使用、更多的垃圾要收集)
-
本来就是这样的。如果我给你完整的背景,你会明白的。这只是一个摘录;)
标签: java multithreading thread-safety locking