synchronized(this),这个this指的是什么???

zero8223 2002-10-08 12:26:59
public synchronized void Push(char c)
{
// :-)
}
这里synchronized 同步的是什么?我一直没有搞懂,我知道应该同步共享的变量,可是难以理解,尤其是synchronized(this),这个this是什么?!不会是Class的引用吧!请高手指点一二
...全文
3486 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fantasy471503202 2010-06-26
  • 打赏
  • 举报
回复
synchronized加锁不管是加在方法上还是,直接加在一个对象上synchronized(this或者obj),一个对象只能加上一个锁,加在方法上表示,多个线程中run()方法如果调用执行了这个加锁的方法,那么在同一时刻只能有一个线程来访问这个方法。
如果直接synchronize(this或者obj)就表示多个线程想使用this对象或者obj对象中的方法或者变量,那么同一时刻只能有一个线程能够获得synchronized这个锁,并且进入此对象执行对象中的方法或者改变变量。
fantasy471503202 2010-06-26
  • 打赏
  • 举报
回复
synchronized加锁不管是加在方法上还是,直接加在一个对象上synchronized(this或者obj),一个对象只能加上一个锁,加在方法上表示,多个线程中run()方法如果调用执行了这个加锁的方法,那么在同一时刻只能有一个线程来访问这个方法。
如果直接synchronize(this或者obj)就表示多个线程想使用this对象或者obj对象中的方法或者变量,那么同一时刻只能有一个线程能够获得synchronized这个锁,并且进入此对象执行对象中的方法或者改变变量。
lianming2010 2010-06-24
  • 打赏
  • 举报
回复
很早的贴了,依然有收获
zero8223 2002-10-22
  • 打赏
  • 举报
回复
但是我要同步的的确是一个变量啊,这和对象有什么关系啊
breeze的一切 2002-10-10
  • 打赏
  • 举报
回复
非也,要同步的是一段代码,这段代码可以由多个线程访问,为了达到同步的效果,于是java就设置了对象锁这个东西,一个线程要访问一段被同步的代码(synchronized所修饰)就必须获得它的对象锁,同时他还会把对象锁锁起,这样在这个现存释放这个对象锁前其他线程是不能获得这个对象锁的,这样就能达到同步的目的,所以synchronized(Object)因该是一个对象的实例,是什么对象都可以
zero8223 2002-10-10
  • 打赏
  • 举报
回复
事实上要同步的是个变量啊,比如char c,那怎么和this有关呢?
我想应该是synchronized(c)比较合理吧?!?!?
北极猩猩 2002-10-08
  • 打赏
  • 举报
回复
sychronized(this)是对对象自身的同步,就是你在访问自己的成员是需要进行同步访问。
实际上
public synchronized void Push(char c)
{
// :-)
}
相当于
public void Push(char c)
{
synchronized(this){
// :-)
}
}
qxjavajava 2002-10-08
  • 打赏
  • 举报
回复
this 是当前对象。也就是我们在同步里提到的对象锁。
synchronized void Push(char c)
-----------在这里,同步的是方法
其实synchronized(Object o)这是块的同步,只要得到对象o,就可以开始这个代码块,而synchronized(this)是最泛泛得同步,只要有个对象就可以同步,

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧