我们可以截获这个锁: public void transfer(Vector<Double> accounts,int from,int to,int amount) { synchronized(accounts) { accounts.set(from,accounts.get(from)-amount); accounts.set(to,accounts.get(to)+amount); } System.out.println(...); } 这个方法可以工作,但是它完全依赖于这样一个事实,Vector类的自己的所有可修改方法都使用内部锁。
public void transfer(Vector<Double> accounts,int from,int to,int amount) { synchronized(accounts) { accounts.set(from,accounts.get(from)-amount); accounts.set(to,accounts.get(to)+amount); } System.out.println(...); }
public class Vector<E> { private Object obj; public void method_1() { synchronized(obj) //这个就是所谓“使用内部锁”? { ... } } }
引用 5 楼 Destroy_The_Code 的回复:引用 3 楼 yongger520 的回复: 内部锁 我的理解应该就是每个Vector内部的那个Object obj; 对每个Vector对象,都要先获得obj的锁 因为这个private Object obj放在Vector内部,且是私有的,所以叫内部锁 可是我在Vector类里面并没有发现有一个pr……
引用 3 楼 yongger520 的回复: 内部锁 我的理解应该就是每个Vector内部的那个Object obj; 对每个Vector对象,都要先获得obj的锁 因为这个private Object obj放在Vector内部,且是私有的,所以叫内部锁 可是我在Vector类里面并没有发现有一个private Object类型的字段。我的JDK版本是jdk1.7.0_15。
内部锁 我的理解应该就是每个Vector内部的那个Object obj; 对每个Vector对象,都要先获得obj的锁 因为这个private Object obj放在Vector内部,且是私有的,所以叫内部锁
楼主大概就是您所写的 Vector类是版本很低的 应该是jdk1.0 默认是由内部锁的有了内部锁 多线程访问时就不会出现并发问题 因为内部锁的作用就是在某时刻只能有一个线程访问 其他的线程只能排队等待 当然你写的有点问题 因为县城每次进来都会判断内部锁 这样很费时间 事实上Vector内部是这样的: public class Vector<E> { pri……
62,621
社区成员
307,251
社区内容
加载中
试试用AI创作助手写篇文章吧