黑马程序员技术交流社区
标题:
求教一个同步代码块的小问题
[打印本页]
作者:
李平
时间:
2012-4-18 21:46
标题:
求教一个同步代码块的小问题
同步代码块:
synchonized(对象)
{
需要被同步的代码块;
}
那个对象的位置应该放什么??
老师用的是Object obj = new Object();的obj。为什么用这个就行?
但是以后所有的都有用这个吗,还是有其他的??
作者:
liuyang
时间:
2012-4-18 21:51
可以是任何对象,只要保证在你需要同步的地方使用的是同一个对象。
作者:
黑马罗坚
时间:
2012-4-18 21:54
锁不一定要放Object对象 所有的对象都可以放 如this 你也可以专门创建一个对象来当锁用 它只是利用对象的状态 跟对象本身没关系。需要注意下同步嵌套的死锁问题。。
作者:
黑马—王宁
时间:
2012-4-18 22:03
所有的对象都可以放.
作者:
黑马罗坚
时间:
2012-4-18 22:35
关键字小写 不是synchonized而是 synchronized
synchronized(this){}(非静态方法中) 当地1个线程(线程1)执行到这句话时检测this的同步锁状态 这是为没锁 可以继续往下执行 当执行完这句话时 this的状态为已锁 如果这是切换到别的线程时当执行到这句话检测this的状态发现已锁卡在这将切换线程 当线程1执行完同步代码块时锁状态为开 其他的线程才可以进入同步代码块中 并且锁状态为已锁
当嵌套同步代码块时 不能用同把锁否则死锁 如
synchronized(this){
synchronized(this){
}
}
当地1个线程即线程1执行完地1行代码时 this状态将为已锁 执行到地2行时 判断this状态 发现已锁将卡在这里 其他线程也将卡在第一行
synchronized(this){
}
synchronized(this){
}
可以用2把不同的锁解决该问题
synchronized(this){
String s=new String();
synchronized(s){
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2