Day13_72_类锁

类锁

* 对象锁(synchronized method{})和类锁(static sychronized method{})的区别

     - 对象锁也叫实例锁,对应synchronized关键字,当多个线程访问多个实例时,它们互不干扰,每个对象都拥有自己的锁,如果是单例模式下,那么就是变成和类锁一样的功能。

     - 对象锁防止在同一个时刻多个线程访问同一个对象的synchronized块。如果不是同一个对象就没有这样子的限制。

     - 加锁静态方法,即类锁。可以换个方向理解,静态方法其实就是类方法,所以加锁静态方法,即类锁。类锁的范围是整个实体类,即全局锁。
  • 代码实例

    ``

      package com.shige.Thread;
        /*
          类锁,类锁只有一个
         */
    public class ThreadTest12 {
        public static void main(String[] args) throws InterruptedException {
    
            //创建线程
            Thread thread=new Thread(new Precossor_12());
            thread.setName("t1");
            Thread thread1=new Thread(new Precossor_12());
            thread1.setName("t2");
    
            //启动线程
            thread.start();
    
            //延迟保证thread先执行
            Thread.sleep(1000);
            thread1.start();
    
        }
    
    
    }
    
    class Precossor_12 implements Runnable{
    
        @Override
        public void run() {
           if("t1".equals(Thread.currentThread().getName())){
               MyClass.m1();
           }
    
            if("t2".equals(Thread.currentThread().getName())){
                MyClass.m2();
            }
        }
    }
    
    class MyClass{
        //synchronized 添加到静态方法上,线程执行到此方法后,会去找类锁
       public synchronized static void m1(){
           try {
               Thread.sleep(5000);
           } catch (InterruptedException e) {
               e.printStackTrace();
           }
           System.out.println("m1..............");
       }
    
        // 该方法不会等m1结束在执行,有哪位它没有被synchronized修饰,如果使用synchronized修饰,那么就一定会等m1结束再执行
        public  static void m2(){
            System.out.println("m2..............");
    
        }
    }
上一篇:Java编程基础篇第六章


下一篇:机器学习day13非监督学习