加入收藏 收藏网站 设为首页 设为首页
招生考试网
学历类| 阳光高考 研 究 生 自学考试 成人高考 专 升 本 中考会考 外语类| 四 六 级 职称英语 商务英语 公共英语 日语能力
资格类| 公 务 员 报 关 员 银行从业 司法考试 导 游 证 教师资格 财会类| 会 计 证 经 济 师 会计职称 注册会计 税 务 师
工程类| 一级建造 二级建造 造 价 师 造 价 员 咨 询 师 监 理 师 医学类| 卫生资格 执业医师 执业药师 执业护士 国际护士
计算机| 等级考试 软件水平 应用能力 其它类| 书画等级 美国高考 驾 驶 员 书法等级 少儿英语 报 检 员 单 证 员 出国留学
 招生考试网 - 计算机等级考试 - 考试辅导 - 计算机二级 - 正文

 
Java锁机制Synchronized方法简介
来源:fjzsksw.com 2010-4-1 编辑:zhanghaifeng 【字体:小 大】
Java锁机制Synchronized方法简介

 

  * synchronized方法控制对类成员变量的访问:每个类实例对应一把锁,每个被synchronized的方法都必须获得

  * 调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释

  * 放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。这种机制确保了同一时刻对于每一个类实例,其所有声

  * 明为 synchronized 的成员函数中至多只有一个处于可执行状态(因为至多只有一个能够获得该类实例对应的锁),

  * 从而有效避免了类成员变量的访问冲突(只要所有可能访问类成员变量的方法均被声明为synchronized)。

  * 也可以将类的静态成员函数声明为synchronized ,以控制其对类的静态成员变量的访问。

  * synchronized方法的缺陷:若将一个大的方法声明为synchronized 将会大大影响效率,典型地,若将线程类

  * 的方法run()声明为synchronized,由于在线程的整个生命期内它一直在运行,因此将导致它对本类任何synchronized

  * 方法的调用都永远不会成功。当然我们可以通过将访问类成员变量的代码放到专门的方法中,将其声明为synchronized,

  * 并在主方法中调用来解决这一问题,但是 Java 为我们提供了更好的解决办法,那就是synchronized块。

  *

  * synchronized是对同一个对象而言的,即一个对象在执行被synchronized锁定的方法或者代码块时是同步的(不会被打断)

  *

  */

 


  public class ThreadTest {
  private void method(Object o) throws InterruptedException{
  Thread t=Thread.currentThread();
  synchronized(t){
  for(int i=0;i<10;i++){
  System.out.print(t.getName()+" ");
  Thread.sleep(100);
  }
  }
  /*


  * 把synchronized(t)换成synchronized(o),比较运行结果

  * synchronized(o)要求共用一把"锁",所以要求要用同一个对象

  * synchronized(o)起到同步效果,synchronized(t)则没同步效果

  * 还有:用synchronized修饰method(Object o),看效果

 


 */
  }
  public static void main(String args[]){
  final ThreadTest th=new ThreadTest();
  final Object o=new Object();
  Thread t0=new Thread( new Runnable(){
  public void run(){
  System.out.println("\nT0 Start");
  try {
  th.method(o);
  } catch (InterruptedException e){
  e.printStackTrace();
  }
  System.out.println("\nT0 End");
  }
  });
  Thread t1=new Thread( new Runnable(){
  public void run(){
  System.out.println("\nT1 Start");
  try {
  th.method(o);
  } catch (InterruptedException e){
  e.printStackTrace();
  }
  System.out.println("\nT1 End");
  }
  });
  t0.start();
  t1.start();
  }
  }

 

 

 



 
  • 上一个文章:

  • 下一个文章:
  • 网站版权与免责声明
    ①由于各方面情况的不断调整与变化,本网所提供的相关信息请以权威部门公布的正式信息为准.
    ②本网转载的文/图等稿件出于非商业性目的,如转载稿涉及版权等问题,请在两周内来电联系.
    推荐文章
  • 此栏目下没有推荐文章
  • 热门文章

    报名考试
    全国 | 黑龙江 | 吉林 | 辽宁 | 内蒙古
    青海 | 宁夏 | 甘肃 | 新疆 | 陕西
    西藏 | 北京 | 天津 | 河北 | 山东
    江苏 | 安徽 | 河南 | 上海 | 浙江
    福建 | 广东 | 山西 | 湖南 | 湖北
    江西 | 广西 | 海南 | 云南 | 贵州
    四川 | 重庆
    分省高校计算机考试
    黑龙江 | 吉林 | 辽宁 | 内蒙古 | 河北
    北京 | 天津 | 新疆 | 甘肃 | 宁夏
    青海 | 陕西 | 山西 | 河南 | 山东
    江苏 | 安徽 | 浙江 | 福建 | 广东
    海南 | 广西 | 江西 | 湖北 | 湖南
    四川 | 上海 | 重庆 | 贵州 | 云南
    西藏
    成绩查询
    报考指南
    试题答案
    模拟试题
    考试辅导
    计算机一级 | 计算机二级 | 计算机三级 | 计算机四级
    经验交流
    高校计算机