synchronized(syncObject) { // This code can be accessed // by only one task at a time }
先抛开一些名词. 你就单纯的理解一下我说的这个例子. syncObject 是一把钥匙, 并且是唯一的一把. 不管有多少个线程. 这个syncObject就只有一个, 先到先得. 这个类中, 有很多地方都有 syncronize(syncObject){ } 这样的代码块. 但是只要有一个线程先 运行到了 syncronize(syncObject) 这里, 表示先把钥匙拿走了, 就可以运行 {} 里面的东西, 其他线程就只能等 这个线程 把{} 里面的东西执行完了把syncObject交给下一个线程, 这样依次排队去执行 有syncronize(syncObject) 标记的{} 代码块. 所以正面回答你的问题就是 syncObject是锁, 锁的也是syncObject. 花括号里面的东西随时可以运行, 只不过N个线程同时运行的时候, 谁先获得syncObject, 谁就可以先运行{}里面的东西 syncroniz(syncObject){ }.本身就是为了在代码里面 对 相互会有冲突的代码块进行有序执行. 所以 syncObject可能会有多个. 代码块有冲突的, 用同一个syncObject. 不知道这样解释, 你是否懂....
syncObject 是对象锁,大括号中的是你锁定的代码,就是要保证同一时刻只有一个线程可以执行大括号中的代码。
62,635
社区成员
307,269
社区内容
加载中
试试用AI创作助手写篇文章吧