线程里synchronized的参数用什么?

J2EE 码拜 10年前 (2015-05-10) 1143次浏览 0个评论
 

我看到很多人用synchronized(参数)时,随便找个string,hashmap就作为参数了。

请问这个参数有什么用呢?synchronized不就是保证每个进来的线程结束后再放下一个线程进来,对吧?

同一时间只能有一个线程可以访问synchronized块内的内容,本质是一把锁,(参数)规定了锁的类型,可以是对象或者类的锁,说白了这个参数决定的是这把锁的作用范围。
应该是synchronized{}的括号内是锁的作用范围吧。跟参数没关系吧,而且对象就是类啊,对象锁和类锁有区别吗?
20分
哥,对象真的不是类,不骗你!
class 人
人 你 = new 人();
人 我 = new 人();

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

如果是
synchronized(人.class){
吃饭();
}
那么只要我在吃饭,你就不能吃饭,得等我吃完!

精辟,骨灰
引用 3 楼 xiars123 的回复:

哥,对象真的不是类,不骗你!
class 人
人 你 = new 人();
人 我 = new 人();

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

如果是
synchronized(人.class){
吃饭();
}
那么只要我在吃饭,你就不能吃饭,得等我吃完!

如果还有一个对象是他,那么如果你在吃的时候,是不是他也可以同时吃?


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明线程里synchronized的参数用什么?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!