多线程synchronized

1.关键字 synchronized 取得的锁都是对象锁,而不是把一段代码或方法当做锁,所以在示例中,哪个线程先执行printNum方法,哪个线程就获得该方法所属对象的锁,thread1运行时获取的是test1的锁,thread2运行时获取的时test2的锁。两个人锁互不影响。

如果在synchronized关键字前加上static修饰,那么这个锁表示锁定.class类,此时thread1与thread2就需要竞争同一把锁。

示例:

public class JustTest{

    private int anInt = 5;
    public synchronized void printNum(String tag){        try {
            if ("a".equals(tag)) {
                anInt = 100;
                System.out.println("tag a ,set num end");
                Thread.sleep(1000);
            } else {
                anInt = 200;
                System.out.println("tag b ,set num end");
            }
            System.out.println("tag ="+tag+", num="+anInt);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        final JustTest test1 = new JustTest();
        final JustTest test2 = new JustTest();
        Thread thread1 = new Thread(() -> test1.printNum("a"));
        Thread thread2 = new Thread(() -> test2.printNum("b"));
        thread1.start();
        thread2.start();
    }
}

结果:

tag a ,set num end
tag b ,set num end
tag =b, num=200
tag =a, num=100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值