多个线程多个锁

作者: Airycode | 来源:发表于2018-05-25 18:50 被阅读3次

    多个线程多个锁:多个线程,每个线程都可以拿到自己指定的锁,分别获得锁之后,执行synchronized方法体的内容。
    如下代码:

    package com.airycode.base.sync002;
    
    /**
     * 关键字synchronized取得的锁都是对象锁,而不是把一段代码(方法)当做锁
     * 所以代码中哪个线程先执行synchronized关键字的方法,哪个线程就持有该方法所属对象的锁(Lock)
     * 在静态方法上加synchronized关键字,表示锁定.class类,类一级别的锁(独占.class)
     * @author admin
     *
     */
    
    public class MultiThread {
    
        /**static*/
        private static int num = 0;
        
        public static 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 (InterruptedException e) {
                e.printStackTrace();
            }
            
            
        }
        
        public static void main(String[] args) {
            /**两个不同的对象*/
            final MultiThread m1 = new MultiThread();
            final MultiThread m2 = new MultiThread();
            
            Thread t1 = new Thread(new Runnable(){
                @Override
                public void run() {
                    m1.printNum("a");
                }
            });
            Thread t2 = new Thread(new Runnable(){
                @Override
                public void run() {
                    m2.printNum("b");
                }
            });
            
            t1.start();
            t2.start();
            
        }
        
        
    }
    
    

    运行结果:


    image.png

    实例总结:
    关键字synchronized取得的锁都是对象锁,而不是把一段代码(方法)当做锁,所以实例代码中那个线程先执行synchronized关键字的方法,那个线程就持有该方法所属对象的锁(Lock),两个对象,线程获得的就是两个不同的锁,他们互不影响。
    有一种则是相同的锁,即在静态方法上加synchronized关键字,表示锁定.class类,类一级别的锁(独占.class).

    相关文章

      网友评论

        本文标题:多个线程多个锁

        本文链接:https://www.haomeiwen.com/subject/fsvujftx.html