java线程安全问题 提出的问题在最后代码块注释中 Thread.sleep(3000)哪一行里


package d3_thread_safe;

public class Account {
    private String cardId;
    private double money;//账户余额

    public Account() {
    }

    public Account(String cardId, double money) {
        this.cardId = cardId;
        this.money = money;
    }

    public void drawMoney(double money) {
        //判断是谁来取钱
        String name = Thread.currentThread().getName();
        //判断余额是否足够
        if (this.money >= money) {
            //取钱
            System.out.println(name + "来取钱成功,吐出:" + money);
            //更新余额
            this.money -= money;
            System.out.println("剩余:" + this.money);

        } else {
            System.out.println("余额不足");
        }

    }

    public String getCardId() {
        return cardId;
    }

    public void setCardId(String cardId) {
        this.cardId = cardId;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }


}

package d3_thread_safe;

/*
取钱的线程类
 */
public class DrawThread extends Thread {
    private Account acc;

    public DrawThread(Account acc, String name) {
        super(name);
        this.acc = acc;
    }

    @Override
    public void run() {
        //小明 小红 取钱
        acc.drawMoney(100000);

    }
}
package d3_thread_safe;

/*
需求:模拟取钱案例

解决线程安全问题的办法就是加锁
 */
public class ThreadDemo {
    public static void main(String[] args) throws Exception {
        //1、定义一个线程类,创建一个共享账户对象
        Account acc = new Account("ICBC-111", 100000);

        //2、创建两个线程对象  代表小明和小红同时进来
        new DrawThread(acc, "小明").start();
        Thread.sleep(3000);    //这里可以采取休眠来解决安全嘛?
        new DrawThread(acc, "小红").start();


    }
}

提出的问题在最后代码块注释中 Thread.sleep(3000)哪一行里

首先, 代码层面上用休眠是否解决了线程安全问题?
答: 在你这个demo里面, 没有线程安全问题; 作为学习, 是可以这样做试验的.
但是呢, 多说几句:
多线程或者并发编程的意义, 是为了提高CPU使用率以及系统的业务处理能力,说白了就是单位时间内多干活, 如果有个线程在"消极怠工", 例如, 它在读网络, 读磁盘...等, 这种操作相比cpu的速度很慢, 那么就把CPU时间贡献给最需要的线程.这样整体的执行效率会提高.
所以, 在这个层面上, 你的代码只能是demo, 违背了多线程并发的意义.
既然不能用休眠来解决线程安全问题, 那么如何处理呢?
答案是: 同步. 例如(常见的synchronized, 或者其它对锁的优化方案等)
希望我的回答能给你带来进一步思考, 有问题继续交流.

并不能只是延迟了下面线程的执行时间,要是上面的线程延迟超过3s才走进判断,下面下次还是会抢占资源

休眠从来不能解决线程安全,你觉得线程安全是因为你这里没有高并发

用休眠来保证线程安全还用什么线程,直接一个线程顺序执行更能保证安全