Synchronized关键字锁多个对象_java培训

发布时间:2020年12月07日作者:atguigu浏览次数:624

一 简介

synchronized是一种独占锁,也是悲观锁。

在JavaSE 1.6之后进行了主要包括为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁以及其它各种优化之后变得在某些情况下并不是那么重了。

java培训

二 synchronized锁多个对象

先看例子:

HasSelfPrivateNum.java

public class HasSelfPrivateNum {

    private int num = 0;

    public synchronized void addName(String username) {
        try {
            if (username.equals(“a”)) {
                num = 100;
                System.out.println(“a set over!”);
                Thread.sleep(2000);//如果去掉thread.sleep(2000),那么运行结果就会显示为同步的效果
            } else {
                num = 200;
                System.out.println(“b set over!”);
            }
            System.out.println(username + ” num=” + num);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        HasSelfPrivateNum hasSelfPrivateNum = new HasSelfPrivateNum();
        HasSelfPrivateNum hasSelfPrivateNum1 = new HasSelfPrivateNum();
        ThreadA threadA = new ThreadA(hasSelfPrivateNum);
        ThreadB threadB = new ThreadB(hasSelfPrivateNum1);
        threadA.start();
        threadB.start();
    }
}

ThreadA.java

public class ThreadA extends Thread {
    private HasSelfPrivateNum hasSelfPrivateNum;

    public ThreadA(HasSelfPrivateNum hasSelfPrivateNum) {
        super();
        this.hasSelfPrivateNum = hasSelfPrivateNum;
    }

    @Override
    public void run() {
        hasSelfPrivateNum.addName(“a”);
    }
}

ThreadB.java

public class ThreadB extends Thread {

    private HasSelfPrivateNum hasSelfPrivateNum;

    public ThreadB(HasSelfPrivateNum hasSelfPrivateNum) {
        this.hasSelfPrivateNum = hasSelfPrivateNum;
    }

    @Override
    public void run() {
        hasSelfPrivateNum.addName(“b”);
    }
}

运行结果:

a set over!
b set over!
b num=200
a num=100

a num=100停顿一会才执行

因为synchronized锁的对象,哪个线程先执行带synchronized关键字的方法,就持有该方法所属对象的锁,其他线程只能等待,多个线程访问的是同一个对象。以上代码中创建了两个HasSelfPrivateNum类对象,所以就产生了两个锁。

想要了解跟多关于Java培训课程内容欢迎关注尚硅谷Java培训,尚硅谷除了这些技术文章外还有免费的高质量Java培训课程视频供广大学员下载学习


上一篇:
下一篇:
相关课程

java培训 大数据培训 前端培训 UI/UE设计培训

关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
全国统一咨询电话:010-56253825
地址:北京市昌平区宏福科技园2号楼3层(北京校区)

深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)

武汉市东湖高新开发区东湖网谷(武汉校区)

西安市雁塔区和发智能大厦B座3层(西安校区)