有关synchronized()中参数用法的问题!!

villagehead 2002-10-29 09:16:46
就是在使一段代码同步时的那个参数。

比如用:
synchronized(this){
//代码
}
是让这些代码在不同的线程里同步执行,

可是synchronized的参数要是个变量呢?
比如:
public void paint(Graphics g){
synchronized(g){
//代码

}
}
这里的synchronized是在保护谁呢?

原来那个this和现在的g在synchronized的参数里都是什么意思呢??
...全文
506 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sliant 2002-10-29
  • 打赏
  • 举报
回复
yes, this

我的理解是,以对象 o 代表临界资源,每个 o 就会有一个等待队列,
synchronized ( o ) { ... }
意思是:申请 o ,如果不行就进入 o 的等待队列;系统自动维护 o 的等待队列,在当前 o 被释放时,自动向等待队列发 notify() 消息

synchronized function() {...}
相当于
function() { synchronized(this) {...} }
qxjavajava 2002-10-29
  • 打赏
  • 举报
回复
1 同步一段代码,在这段代码执行的过程中都讲保持着这个对象锁。需要却没有得到这个对象锁的代码无法执行。

那么用synchronized修饰的方法的object是谁呢?
是this吗?-----------也可以理解为this,事实上,在同步方法时,我们不过多的考虑对象锁的问题,因为毕竟是要由对象句柄来调用方法。
villagehead 2002-10-29
  • 打赏
  • 举报
回复
那这个Object o锁的意思是不是说:
碰到这个object的时候就锁住关于这个object的程序代码,
不让别的进程去“碰”

然后去执行它,
等执行完,再去把它打开!??

那么用synchronized修饰的方法的object是谁呢?
是this吗?
qxjavajava 2002-10-29
  • 打赏
  • 举报
回复
synchronized(Object o){} 这是同步一个代码块,这里的Object o 就是我们常说的对象锁。只有得到这个Object o 锁,才可以开始这块同步的代码。当如具体的你还要看书。
只有得到这个Object o 锁,才可以开始这块同步的代码。-------这时关键。

62,615

社区成员

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

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