注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

TERONY的博客

Still Achieving.

 
 
 

日志

 
 

sleepless in java & synchronized  

2011-06-12 20:56:21|  分类: Profession |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Synchronize关键字可以使方法(或者方法块)同步执行,同时保护线程“共享”资源在当前线程未结束运行前被修改,但是,如果修改“共享”资源的不是线程run方法,那么,synchronized标注的方法(或者方法块)也不能保证资源不被修改。譬如:

public class SynchronizedExercies {
 public static void main(String[] args) {
  MyRunner2 mr = new MyRunner2();
  Thread thread = new Thread(mr);
  thread.start(); //线程同步(synchronized),为私有属性b赋值后,线程“睡眠”5秒

  /*直接调用实例对象的method2方法,该方法使主线程“睡眠”2秒后修改私有属性b的数值,尽管线程run方法还未执行完毕,但仍可修改私有属性b的数值,所以线程run方法最终输出的结果是500而不是100.*/

  mr.method2();  

 }
}

class MyRunner2 implements Runnable {
 private int b=0;
 
 public void run() {
  method1();
 }
 
 public synchronized void method1() {
  b = 100;
  try {
   System.out.println("线程method1开始执行……");
   Thread.sleep(5000);
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  System.out.println("b = " + b);
 }
 public void method2() {
  try {
   System.out.println("方法method2执行……");
   Thread.sleep(2000);
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  b = 500;
 }
}

  评论这张
 
阅读(9)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017