zoukankan      html  css  js  c++  java
  • synchronized的使用方法和作用域

    文章地址:https://mp.weixin.qq.com/s?__biz=MzI4NTEzMjc5Mw==&mid=2650554746&idx=1&sn=8e45e741ca9f058dba1f3ebbea0e9f07&chksm=f3f833ecc48fbafa295e355c1cdd52dc4259f161dafdc1703d181a5e9f4f76563c98493bd221&token=2005887224&lang=zh_CN#rd

    synchronized是保证多线程同步执行的关键字,它的用法有以下几种

     

    对象锁

    public class MyClass{

        public synchronized void method1(){

            //dosomething

        }

        public synchronized void method2(){

            //dosomething

        }

        public void method3(){

            //dosomething before synchronized

            synchronized(this){

                //dosomething 

            }

        }

        public void method4(){

            //dosomething

        }   

    }

    如果用三个线程分别执行方法一,方法二,方法三,  当一个线程抢先获取得锁之后,其他线程在此刻不能继续执行,这种锁叫做对象锁.锁住的是整个对象.上面代码synchronized放在方法前以及代码块加(this),这两种方式.如果还有其他线程则会执行普通方法以及同步代码块前的普通代码

     

    类锁

    public class MyClass{

        public synchronized void method1(){

            //dosomething

        }    

        public static synchronized void method2(){

            //dosomething

        }

        public void method3(){

            synchronized(MyClass.class){

                //dosomething 

            }

        }

    }

    以上代码,

    情况1:如果用两个线程去执行方法1和方法2,两个线程会获取各自的锁各自执行自己的代码,

    情况2:两个线程都执行方法2,如果一个线程抢先获得锁,另一个线程不得执行

    情况3:两个线程分别执行方法1和方法3,两个线程会获取各自的锁各自执行自己的代码,

    情况4,两个线程都执行方法3,如果其中一个线程先获得锁另一个线程不得执行

    情况5,两个线程分别执行方法2和方法3,如果其中一个线程先获得锁,另一个线程不得执行.

     

    方法二和方法三的叫类锁

    公众号:

  • 相关阅读:
    MFC中DoDataExchange()的作用
    图片下面出现空白像素的问题解决
    nginx 的 autoindex on首页不显示的问题 按照下面几行要写上不然不行
    配置 PHP 的 Session 存储到 Redis
    redis4安装
    jumpserver安装
    mysql命令参数详解
    定制LNMP的RPM包
    NTP原理
    内网环境NTP服务及时间同步(CentOS6.x)配置和部署
  • 原文地址:https://www.cnblogs.com/qq289736032/p/10716259.html
Copyright © 2011-2022 走看看