landiaozhuyi 2014-11-26 14:30
浏览 420
已采纳

JAVA里synchronized同步代码块的一点疑问

代码如下:

[code="java"]
public class SomeObj {
public void print(int i){
System.out.println(Thread.currentThread().getName()+DateHelper.getNow()+ " " + i);
try {
wait(1000);
} catch (InterruptedException e) {
e.printStackTrace();

}
}
}
public
class ThreadA extends Thread{
private SyncTest st;
public ThreadA(SyncTest syncTest){
this.st=syncTest;
}

public void run(){
st.methodA();
}
}
public class SyncTest {
private volatile int i;

public static void main(String[] args) throws Exception {
    new SyncTest().startUp();
}

public void startUp(){
    for (int a = 0; a < 10; a++) {
        new ThreadA(this).start();
    }
}

private  SomeObj obj = new SomeObj();

public void methodA() {
    synchronized (obj) {
       obj.print(i);

System.out.println(Thread.currentThread().getName()+DateHelper.getNow() + " god is a girl");
i++;

    }
}

}

[/code]

    synchronized (obj) {  运行结果显示,同步代码块并没有被锁住,而把这行代码的obj替换成this或者随便其他的instance对象,都能锁住代码块。求解?
  • 写回答

1条回答 默认 最新

  • kilobug 2014-11-26 16:12
    关注

    因为wait(1000)会将当前对象obj的控制权(即锁)交出去1秒
    可以用Thread.sleep(1000)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥20 求用stm32f103c6t6在lcd1206上显示Door is open和password:
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法