java 对方法的参数加锁_个人对synchronized锁的参数理解,如果有误望指出

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

synchronized有几种用法

给方法加锁也就是在声明方法时加上synchronized关键字,这样同时就只能有一个线程访问该方法

其次就是代码块,synchronized(xx){xxx}但是之前我一直不解括号里面的参数是什么..后来自己慢慢翻资料理解了一些,例如

synchronized(this){xxx} this我们都知道是指当前方法的所属类

而synchronized(变量)和synchronized(对象)的意义又是什么呢...经过摸索我发现

synchronized(){}会对2个括号内的内容都进行加锁例如

1.A a = new A();

2.synchronized(a){

3. a.k();

4. System.out,println(a.toString());

5.}

6.a.k();

当有线程执行到synchronized语句时,synchronized会将小括号里面的a对象进行加锁和对大括号里面的所有内容进行加锁,也就是这时即使在大括号外面的第6行代码a.k()实际上也是被锁的

当然如果synchronized(this)的话就代表将整个类都锁上,也就是当有线程执行到该synchronized语句时,其他只要在执行该类的线程都会被堵塞因为整个类都被锁上了

并且synchronized的参数除了要加锁的对象外还可以作为synchronized的名称,大家也都看过下面2种synchronized的写法吧

Object lock = new Object();

synchronized(lock){...}

以及

synchronized有几种用法

给方法加锁也就是在声明方法时加上synchronized关键字,这样同时就只能有一个线程访问该方法

其次就是代码块,synchronized(xx){xxx}但是之前我一直不解括号里面的参数是什么..后来自己慢慢翻资料理解了一些,例如

synchronized(this){xxx} this我们都知道是指当前方法的所属类

而synchronized(变量)和synchronized(对象)的意义又是什么呢...经过摸索我发现

synchronized(){}会对2个括号内的内容都进行加锁例如

1.A a = new A();

2.synchronized(a){

3. a.k();

4. System.out,println(a.toString());

5.}

6.a.k();

当有线程执行到synchronized语句时,synchronized会将小括号里面的a对象进行加锁和对大括号里面的所有内容进行加锁,也就是这时即使在大括号外面的第6行代码a.k()实际上也是被锁的

当然如果synchronized(this)的话就代表将整个类都锁上,也就是当有线程执行到该synchronized语句时,其他只要在执行该类的线程都会被堵塞因为整个类都被锁上了

并且synchronized的参数除了要加锁的对象外还可以作为synchronized的名称,大家也都看过下面2种synchronized的写法吧

Object lock = new Object();

synchronized(lock){...}

以及

synchronized("xxxxx"){...}

的写法,这样synchronized里面的对象对于程序的逻辑来说起不到任何意义,不过这样写肯定有它的道理,例如

Object lock_1 = new Object();

Object lock_2 = new Object();

synchronized(lock_1){...}

synchronized(lock_1){...}

synchronized(lock_2){...}

这样,有线程执行synchronized(lock_1){...}时那么下面的那个synchronized(lock_1){...}也将会被锁死而synchronized(lock_2){...}不会,这样就起到了一个区分锁的作用

不过大家还是最好先自己试验一下...我不敢保证我说的全部都是对的,如果有误望大家指出

顺便值得一提的是,多个线程被启动时,这些线程执行的run方法都是分别独立的,而不是多个线程在执行一个run方法,这样的话synchronized是无效的也是无意义的,因为以run的角度来看只有一个线程在执行它,而要让synchronized有意义就必须涉及到线程间的资源共享数据传递等,也就是多个线程需要执行一个代码,这样synchronized才是有意义的,通常个人喜欢独立些一个类负责资源共享,而synchronized就是在该类当中起到同步控制的语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值