Java教程

线程同步

本文主要是介绍线程同步,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

方式一  : 同步代码块

作用:把出现线程安全问题的核心代码给上锁。

原理:每次只能一个线程进入,执行完毕后自动解锁,其他线程才可以进来执行。

public void drawMoney(double money){
    //先获取谁来取钱
    String name = Thread.currentThread().getName();

    //同步代码块
    //this == acc 共享账户
    synchronized (this) {
        //1. 判断账户是否够钱
        if (this.money >= money){
            //2. 取钱
            System.out.println(name + "来取钱成功, 吐出" + money);
            this.money -= money;
            System.out.println(name+"取钱后剩余"+this.money);
        }else {
            //4. 余额不足
            System.out.println(name+"来取钱,余额不足");
        }
    }
}

同步代码块是如何实现线程安全的?

对出现问题的核心代码使用synchronized进行加锁

每次只能一个线程占锁进入访问

==

同步代码块的同步锁对象有什么要求?

对于实例方法建议使用this作为锁对象。

对于静态方法建议使用字节码(类名.class)对象作为锁对象。

=====================

方式二  同步方法

作用:把出现线程安全问题的核心方法给上锁

原理:每次只能一个线程进入,执行完毕以后自动解锁,其他线程才可以进来执行。

修饰符 synchronized 返回值类型 方法名称(形参列表) { 操作共享资源的代码 }

 

注意: 

同步方法其实底层也是有隐式锁对象的,只是锁的范围是整个方法代码。

如果方法是实例方法:同步方法默认用this作为的锁对象。但是代码要高度面向对象!

如果方法是静态方法:同步方法默认用类名.class作为的锁对象。

这篇关于线程同步的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!