关键字小写 不是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){
}
} |