2.2.6验证同步代码块时锁定当前对象的
Posted 成功的路上总是离不开贵人的帮助,名师的指点和小人的刺激。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.2.6验证同步代码块时锁定当前对象的相关的知识,希望对你有一定的参考价值。
和synchronized方法一样,synchronized(this)代码块也是锁定当前对象的。
package com.cky.utils; /** * Created by chenkaiyang on 2017/12/6. */ public class Task { public void otherMethod() { System.out.println("othermethod start"); } public void serviceMethodA(){ synchronized (this) { for (int i = 0; i < 100; i++) { System.out.println("同步"+ Thread.currentThread().getName() +" i="+(i+1)); } } } }
package com.cky.thread; import com.cky.utils.Task; /** * Created by chenkaiyang on 2017/12/5. */ public class ThreadA extends Thread{ private Task service; public ThreadA(Task service) { super(); this.service = service; } @Override public void run() { super.run(); service.serviceMethodA(); } }
package com.cky.thread; import com.cky.utils.Task; /** * Created by chenkaiyang on 2017/12/5. */ public class ThreadB extends Thread{ private Task service; public ThreadB(Task service) { super(); this.service = service; } @Override public void run() { super.run(); service.otherMethod(); } }
package com.cky.test; import com.cky.thread.ThreadA; import com.cky.thread.ThreadB; import com.cky.utils.Task; /** * Created by chenkaiyang on 2017/12/6. */ public class Test2 { public static void main(String[] args) throws InterruptedException { Task task = new Task(); ThreadA threadA = new ThreadA(task); threadA.start(); ThreadB threadB = new ThreadB(task); threadB.start(); } }
同步Thread-0 i=5 同步Thread-0 i=6 同步Thread-0 i=7 同步Thread-0 i=8 othermethod start 同步Thread-0 i=9 同步Thread-0 i=10
上面结果执行是异步执行的,下面更改othermethod
package com.cky.utils; /** * Created by chenkaiyang on 2017/12/6. */ public class Task { synchronized public void otherMethod() { System.out.println("othermethod start"); } public void serviceMethodA(){ synchronized (this) { for (int i = 0; i < 100; i++) { System.out.println("同步"+ Thread.currentThread().getName() +" i="+(i+1)); } } } }
同步Thread-0 i=94 同步Thread-0 i=95 同步Thread-0 i=96 同步Thread-0 i=97 同步Thread-0 i=98 同步Thread-0 i=99 同步Thread-0 i=100 othermethod start
以上是关于2.2.6验证同步代码块时锁定当前对象的的主要内容,如果未能解决你的问题,请参考以下文章
java多线程——锁机制synchronized(同步方法)