多个线程多个锁

作者: 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).

相关文章

  • 多个线程多个锁

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

  • 深入理解锁的实现原理(一)

    一、分类: 1. 公平锁/非公平锁: 公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁是指多个线程获取锁的顺...

  • 深入理解锁的实现原理(一)

    一:分类 1.公平锁/非公平锁 公平锁就是多个线程按照申请锁的顺序来获取锁的。 非公平锁就是多个线程获取锁的顺序并...

  • Java锁有哪些种类

    一 公平锁和非公平锁 公平锁:多个线程按照申请锁的顺序来获取锁 非公平锁:多个线程获取锁的顺序并不是按照申请锁的顺...

  • 分门别类总结Java中的各种锁,让你彻底记住

    概念 公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁。 非公平锁是指多个线程获取锁的顺序并不是按照申...

  • 锁——公平锁和非公平锁

    公平锁 多个线程按照申请锁的顺序来获取锁。 非公平锁 多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线...

  • Java15种锁(转载)

    公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺...

  • Java锁之公平锁和非公平锁

    公平锁 是指多个线程按照申请锁的顺序来获取锁,遵循的是 先来后到 原则; 非公平锁 是指多个线程获取锁的顺序并不是...

  • 1-6linux系统编程——线程间通信——练习:模拟银行的排队系

    线程间通信 信息交换: 使用多个线程都可见的内存区域 线程互斥锁: 保障有同一把锁保护的共享资源被多个线程互斥访问...

  • Java中的锁

    锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时 访问共享资源(但是有些锁可以允许多个...

网友评论

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

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