hk700wang 2014-08-12 01:48 采纳率: 0%
浏览 4050

java synchronized没有起作用

package com.wxb.syn;

class Semaphore{}

public class BalanceTest extends Thread{
public static int balance = 100;
public Semaphore semp = new Semaphore();
public void run() {
synchronized(this){
// System.out.println("balance=" + balance);
if(balance == 100) {
// try {
// sleep(1000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
balance = balance - 100;
System.out.println(balance);
System.out.println("withdraw 100 successful!");
}else{
System.out.println("failed");
}
}

}
public static void main(String[] args) {
    BalanceTest bt = new BalanceTest();
    bt.start();
    BalanceTest bt2 = new BalanceTest();
    bt2.start();
    BalanceTest bt3 = new BalanceTest();
    bt3.start();
    BalanceTest bt4 = new BalanceTest();
    bt4.start();
    BalanceTest bt5 = new BalanceTest();
    bt5.start();
    BalanceTest bt6 = new BalanceTest();
    bt6.start();
}

}

不加sleep只有一个successful,加了之后都成功synchronized好像不起作用

  • 写回答

1条回答

  • 天马321 2014-08-12 02:52
    关注

    问题应该是出在这一句:synchronized(this)
    搞个synchronized方法,run的时候调用它

    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置