synchronized(this)的一些理解

synchronized(this)的一些理解

ID:38289542

大小:24.73 KB

页数:13页

时间:2019-06-07

synchronized(this)的一些理解_第1页
synchronized(this)的一些理解_第2页
synchronized(this)的一些理解_第3页
synchronized(this)的一些理解_第4页
synchronized(this)的一些理解_第5页
资源描述:

《synchronized(this)的一些理解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、对synchronized(this)的一些理解一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchron

2、ized(this)同步代码块的访问将被阻塞。四、第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。五、以上规则对其它对象锁同样适用.举例说明:一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。packageths;publicclassThre

3、ad1implementsRunnable{publicvoidrun(){synchronized(this){for(inti=0;i<5;i++){System.out.println(Thread.currentThread().getName()+"synchronizedloop"+i);}}}publicstaticvoidmain(String[]args){Thread1t1=newThread1();Threadta=newThread(t1,"A");Threadtb=newThread(t1,"B");ta.start();tb.start();}

4、}结果:Asynchronizedloop0Asynchronizedloop1Asynchronizedloop2Asynchronizedloop3Asynchronizedloop4Bsynchronizedloop0Bsynchronizedloop1Bsynchronizedloop2Bsynchronizedloop3Bsynchronizedloop4二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。packageths;pub

5、licclassThread2{publicvoidm4t1(){synchronized(this){inti=5;while(i-->0){System.out.println(Thread.currentThread().getName()+":"+i);try{Thread.sleep(500);}catch(InterruptedExceptionie){}}}}publicvoidm4t2(){inti=5;while(i-->0){System.out.println(Thread.currentThread().getName()+":"+i);try{T

6、hread.sleep(500);}catch(InterruptedExceptionie){}}}publicstaticvoidmain(String[]args){finalThread2myt2=newThread2();Threadt1=newThread(newRunnable(){publicvoidrun(){myt2.m4t1();}},"t1");Threadt2=newThread(newRunnable(){publicvoidrun(){myt2.m4t2();}},"t2");t1.start();t2.start();}}结果:t1:4t2

7、:4t1:3t2:3t1:2t2:2t1:1t2:1t1:0t2:0三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。//修改Thread2.m4t2()方法:publicvoidm4t2(){synchronized(this){inti=5;while(i-->0){System.out.println(Thread.currentThread().getName()+":"+i)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。