我学习线程安全,在网上搜索时似乎无法找到问题的明确答案。
这有什么区别和影响:
synchronized (lock) {
new Thread () {
public void run() {
// critical section
}
}.start();
}
和此:
new Thread () {
public void run() {
synchronized (lock) {
// critical section
}
}
}.start();
为了给你一个背景信息,我正在为一个小实验室编写代码,方法是每个请求一个帖子'因此,每次调用该方法时,上述任何一个都会执行到关键部分'在它自己的线程中执行。
因此在线程内部或外部锁定会产生影响吗?每个帖子是否继承了#39;锁或是否必须在每个线程内完全是线程安全的?
答案 0 :(得分:1)
同步只意味着一次只有一个线程可以执行代码的某些部分
在第一个示例中,一次只有一个线程可以创建并启动新线程。但请注意,您没有保护关键部分(多个线程可以同时执行"运行"方法)
synchronized (lock) {
new Thread () {
public void run() {
// critical section
}
}.start();
}
在第二个例子中,多个线程可以创建并启动一个新线程,但一次只能有一个线程执行临界区(受" lock"保护)
new Thread () {
public void run() {
synchronized (lock) {
// critical section
}
}
}.start();