java并发编程--synchronized关键字

 

package cn.bufanli.test;

/**
 * 关键字 synchronized 关键字取得的锁都是对象锁,而不是一段代码(方法) 当做锁
 * 所以代码中哪个线程synchronized关键字的方法 哪个线程就持有该方法所属对象的锁(lock)
 *多线程多个锁:多个线程每个线程都可以拿到自己指定的锁.分别获得锁之后,执行synchronized方法体的内    
 *容
 * 在静态方法上加synchronized 关键字,表示锁定.class类 类一级别的锁(独占.class类)
 * 类级别的锁:创建多个对象,多个对象持有的锁是1把;
 * 方法级别锁,创建多个对象,多个对象各持有1把锁
 */
public class  MultiThread {
    /**
     * 变量上加static 关键字保证数据的原子性
     */
    private static int num = 0;

    /**
     * 方法上加 static 是类锁
     * @param tag
     */
    private  synchronized  void printNum(String tag){
        try {
            if(tag.equals("a")){
                num = 100;
                System.out.println("tag a ,set num over!");
                Thread.sleep(1000);
            }else{
                num = 200;
                System.out.println("tag b ,set num over!");
            }
            System.out.println("tag:" + tag + "num:" + num);

        }catch (Exception e){

        }
    }

    /**
     * 注意主函数run方法的执行顺序
     * @param args
     */
    public static void main(String[] args) {
        //两个不同的对象
        MultiThread multiThread = new MultiThread();
        MultiThread multiThread2 = new MultiThread();


        Thread thread = new Thread(() -> {
            multiThread.printNum("a");
        });
        Thread thread2 = new Thread(() -> {
            multiThread2.printNum("b");
        });
        thread.start();
        thread2.start();
        /*Thread thread = new Thread(new Runnable() {
            @Override
            public void run(){
                multiThread.printNum("a");
            }
        });
        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run(){
                multiThread2.printNum("b");
            }
        });
        thread.start();
        thread2.start();*/


    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值