锁定线程外部或内部?

时间:2017-06-26 01:52:57

标签: java multithreading thread-safety locking

我学习线程安全,在网上搜索时似乎无法找到问题的明确答案。

这有什么区别和影响:

synchronized (lock) {
    new Thread () {
        public void run() {
            // critical section
        }
    }.start();
}

和此:

new Thread () {
    public void run() {
        synchronized (lock) {
            // critical section
        }
    }
}.start();

为了给你一个背景信息,我正在为一个小实验室编写代码,方法是每个请求一个帖子'因此,每次调用该方法时,上述任何一个都会执行到关键部分'在它自己的线程中执行。

因此在线程内部或外部锁定会产生影响吗?每个帖子是否继承了#39;锁或是否必须在每个线程内完全是线程安全的?

1 个答案:

答案 0 :(得分:1)

同步只意味着一次只有一个线程可以执行代码的某些部分

在第一个示例中,一次只有一个线程可以创建并启动新线程。但请注意,您没有保护关键部分(多个线程可以同时执行"运行"方法)

synchronized (lock) {
    new Thread () {
        public void run() {
            // critical section
        }
    }.start();
}

在第二个例子中,多个线程可以创建并启动一个新线程,但一次只能有一个线程执行临界区(受" lock"保护)

new Thread () {
    public void run() {
        synchronized (lock) {
            // critical section
        }
    }
}.start();