A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张宏祚 中级黑马   /  2013-11-2 17:08  /  1233 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看到多线程的同步函数的锁的哪一个部分,感觉不太理解啊,一个类实现了runnable接口,里面有一个同步代码块和一个同步函数,这两个锁不一样,然后线程不安全,这一段怎么也不太明白,希望有哪位朋友能具体的,把详细的理解步骤讲解总结一下,谢谢啦!

最后,到底怎么理解"锁"的概念,如果两个函数具有相同的锁代表了什么?希望有人解答!

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

4 个回复

正序浏览
我觉得你想不通的是在一个类中定义了不管多少个同步代码块或同步函数,那么这样就ok安全了。但是这样理解还是不行的,一个类中可以定义好几个锁,想要俩个同步代码对同一个对象操作,还必须给他们上同一把锁也就是Synchronized后面的对象。只要对象一样,那么他们就是对同一个锁操作。
回复 使用道具 举报
--_.Is’攸稀 发表于 2013-11-2 17:54
正好我今天也看到这,锁的概念我理解就是一个小房间你一旦进去以后把你锁起来,要执行完才给你出来,其他的 ...

我不理解的就是毕老师证明 同步函数的锁是this的那个部分,如果两个synchronized方法的锁不同,。。。。
回复 使用道具 举报
锁:Synchronized(lock){ ... }
就好比公共厕所那单间,谁进去了就会顺手把门关了,这门就是参数lock,这单间就是这大括号,
其他人还想进这个单间的话,就得在外面等,等里面的人出了这单间,后面的人才能进去,然后也会顺手把门关了
死锁:
两个人吃饭,只有一双筷子(咱们论根算,一根叫筷子A,一根叫筷子B),
然后规定,只有同时拿着A和B才能吃东西(一根筷子不能用吧,完了还不让你直接用手抓着吃)
还规定,必须和谐竞争,不能动手抢
张三拿着A筷子,相当于张三的线程(ThreadZhang3)进入了 Synchronized(A){ ... } 代码块,
他在这个块里面,还想去拿B筷子,相当于 Synchronized(A){ Synchronized(B){//进不来} }
结果B筷子被李四拿了,相当于李四的线程(ThreadLi4)进入了 Synchronized(B){ ... } 代码块,
这时候问题就出来了,张三拿不到B筷子,又不让抢李四手里的筷子,就只能等
而李四拿了B筷子自然还想要拿A筷子,相当于 Synchronized(B){ Synchronized(A){//进不来} }
一看A筷子在张三手里,他也没辙了,俩人你看我我看你,就是没法吃饭

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
正好我今天也看到这,锁的概念我理解就是一个小房间你一旦进去以后把你锁起来,要执行完才给你出来,其他的要执行的才能进去。两个锁不一样,然后线程不安全是因为你想想看,俩个线程共享一个资源就是类似一个房间,可是有俩门(想想看一门一锁的),各自进各自的,这样就不安全了。(个人见解)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马