为什么只给run方法上锁后,只有一个进程能执行(语言-java)

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
public class T {
    public static void main(String[] args) {
        Card card = new Card();
        new Thread(card).start();
        new Thread(card).start();
    }
}
class Card implements Runnable{
    private int balance = 10000;
    @Override
    public/*synchronized*/ void run() {
        while (true){
            synchronized (this){
                if (balance <= 0) {
                    System.out.println("余额不足。取钱失败");
                    break;
                }
                balance -= 1000;
                System.out.println(Thread.currentThread().getName() + "取钱成功,当前余额为:" + balance);
            }
            try {
                Thread.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

运行结果及报错内容

img

只给run方法上锁后只有一个进程能执行?为什么没有交替执行?

synchronized 对run上锁,相当于这个方法同一个时间只能一个线程访问,所以不能交替。

如有帮助,请采纳一下,谢谢!如有不清楚可以在问额。

synchronized 对run方法上锁,就表明了,只能有一个线程在同一时间执行,所以等该线程执行完毕,才会进行下一个线程执行,synchronized 是同步锁,非公平的锁