Use*_*902 0 java multithreading synchronized
当我尝试执行这段代码时,我得到的输出就像12221121212121221212
.当我声明方法时synchronized
,它不应该允许其他线程接管控件
package com.test;
public class TestProject extends Thread {
public void run() {
synchronized (this) {
for (int i = 0; i < 10; i++) {
System.out.print(getName());
}
}
}
public static void main(String[] args) throws InterruptedException {
TestProject myProject = new TestProject();
TestProject myProject1 = new TestProject();
myProject.setName("1");
myProject1.setName("2");
myProject.start();
myProacject1.start();
}
}
Run Code Online (Sandbox Code Playgroud)
那么,如何更改代码以获得顺序格式的输出11111111112222222222或22222222221111111111?
您正在同步this
,即在TestProject
对象上.由于您有两个单独的对象,因此您有两个单独的锁.因此,无论synchronized
其他线程正在做什么,两个线程都可以进入该部分.
要跨实例同步,TestProject
需要静态锁定:
public class TestProject extends Thread {
private static final Object lock = new Object();
public void run() {
synchronized (lock) {
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1106 次 |
最近记录: |