线程里synchronized的参数用什么?

charlesxu 2012-09-17 03:39:23
我看到很多人用synchronized(参数)时,随便找个string,hashmap就作为参数了。

请问这个参数有什么用呢?synchronized不就是保证每个进来的线程结束后再放下一个线程进来,对吧?
...全文
680 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongyi_feng123 2015-04-28
  • 打赏
  • 举报
回复
吴孟超 2015-04-27
  • 打赏
  • 举报
回复
引用 3 楼 xiars123 的回复:
哥,对象真的不是类,不骗你! class 人 人 你 = new 人(); 人 我 = new 人(); 如果是 synchronized(你){ 吃饭(); } 那么说明你只能一顿一顿吃,不能同时(多线程)吃好几顿饭; 如果是 synchronized(人.class){ 吃饭(); } 那么只要我在吃饭,你就不能吃饭,得等我吃完!
如果还有一个对象是他,那么如果你在吃的时候,是不是他也可以同时吃?
charlesxu 2012-09-26
  • 打赏
  • 举报
回复
精辟,骨灰
xiars123 2012-09-17
  • 打赏
  • 举报
回复
哥,对象真的不是类,不骗你!
class 人
人 你 = new 人();
人 我 = new 人();

如果是
synchronized(你){
吃饭();
}
那么说明你只能一顿一顿吃,不能同时(多线程)吃好几顿饭;

如果是
synchronized(人.class){
吃饭();
}
那么只要我在吃饭,你就不能吃饭,得等我吃完!
charlesxu 2012-09-17
  • 打赏
  • 举报
回复
应该是synchronized{}的括号内是锁的作用范围吧。跟参数没关系吧,而且对象就是类啊,对象锁和类锁有区别吗?
xiars123 2012-09-17
  • 打赏
  • 举报
回复
同一时间只能有一个线程可以访问synchronized块内的内容,本质是一把锁,(参数)规定了锁的类型,可以是对象或者类的锁,说白了这个参数决定的是这把锁的作用范围。

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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