5
|
James McMahon · 技术社区 · 16 年前 |
![]() |
1
10
有必要将“锁”和“锁定对象”的概念分开。没有“锁定对象”的真正概念——有“获取(和释放)”锁 关联 物体。是的,听起来我在吹毛求疵-但是区别很重要,因为如果你说 对象 被锁定时,听起来没有其他线程能够在锁定期间更改对象中的任何内容。 相反,它只是意味着当锁被持有时,没有其他线程能够获得相同的锁。锁和与锁关联的对象的任何内容之间没有直接关系。 声明为“synchronized”的方法获取与其所属对象的实例关联的锁。这只会使同一对象上的其他同步方法等待,并使显式同步的同步语句等待。 就我个人而言,我不喜欢同步方法——我喜欢通过在只用于同步的(private,final)成员变量上显式同步使其更清晰。 |
![]() |
2
1
只有当您将run方法标记为synchronized或将threada运行代码标记为synchronized方法时。 在JVM中,每个对象都拥有所谓的监视器。一次只能有一个线程拥有与给定对象关联的监视器。synchronized是在继续之前告诉当前线程获取监视器的方法。 此外,类本身还拥有静态方法的监视器。 |
![]() |
3
0
“锁”(实际上这个变体称为监视器)的含义完全是一种约定,没有强制的访问限制。 功能依赖于所有对象行为良好,并在访问数据之前获取相应的锁。只有在具有适当访问控制的类中封装这种所需的行为,您才能为客户机对象强制实施它。 |
![]() |
da cheng · 在c++11中使用条件变量使程序陷入死锁 6 年前 |
![]() |
Eunjeong Choi · 为什么此代码返回意外结果?(条件变量) 6 年前 |
![]() |
Razonixx · 从线程内增加全局计数器变量,而不必等待每个线程 7 年前 |
![]() |
Administrator · c#-等待完成2个线程中的1个 7 年前 |
![]() |
Francis Cugler · 删除Windows库依赖项 7 年前 |
![]() |
AshR · 程序断断续续地使用main报告与线程本身不同的线程id 7 年前 |
|
user7256215 · 在macOS内核扩展中有效地使用同步 7 年前 |