A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒋朝权 黑马帝   /  2011-9-27 14:28  /  2320 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package test;
public class Test {
    int b=100;

    public synchronized void method1() throws Exception{
       b=1000;
       Thread.sleep(5000);     
       System.out.println("m1:b="+b);
    }
  public void method2(){   
       System.out.println("m2:b="+b);
    }
}
当一个线程执行method1()的时候,另外一个线程能执行method2()方法吗?对同步锁这块不是很理解,也不知道该怎么用?希望大家分享下经验~~~~~~

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

6 个回复

正序浏览
黑马网友  发表于 2011-9-28 10:30:24
7#
synchroizded方法控制对对象成员的访问,每个对象对应一把锁。每个Synchronized方法都必须获得调用改方法的对象的锁后才能执行。方法一旦执行便独享该锁。直到该方法返回时才释放,然后被阻塞的线程才可以获得锁而投入运行。[color=black]这种机制确保了[color=red]同一时刻对于同一个类的不同对象调用synchronzied的方法的对象至多有一个[/color]处于运行状态。避免了了对成员的访问冲突。[/color]
[color=black]        而你的method2并没有用同步.。[/color]

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-27 15:12:11
地板
同步函数和同步代码块一般用于多线程共同操作数据的方法或者几行代码上
回复 使用道具 举报
黑马网友  发表于 2011-9-27 15:10:46
报纸
同步   就是要控制这个对象   的某个方法  或是对此对象进行操作时   在预定的一系列操作未完成时  不运行 其他线程操作此对象

解决这个问题的方法就是同步锁,,同步锁   锁的永远是对象

在对象中有2个方法  这个是直接控制对象锁的
wait()  通知其他线程 我要锁这个对象了
notify() 通知其他线程   我解锁了这个对象

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-27 15:08:10
板凳
可以调用method2的
回复 使用道具 举报
黑马网友  发表于 2011-9-27 15:06:22
藤椅
synchronized 会使用一个同步监视器对象,一般方法中synchronized使用的监视器对象就是this,当线程执行时,其它使用了synchronized 的方法或代码块就处于等待状态,直到线程执行完释放了监视器对象。你的method2方法并没有synchronized标记同步,当一个线程执行method1()的时候,另外一个线程是可以执行method2()方法的

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-27 14:49:41
沙发
呵呵,凡是涉及到了锁的地方就说明进入了一个共同的地方,就好比在火车上的厕所,一个人进去之后就会把门锁上,这样别人就进不去了,只有当这个人出来之后释放了锁,下一个人才可以进去。synchronized 就表示锁。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马