黑马程序员技术交流社区
标题:
关于使用线程操作共享资源的问题
[打印本页]
作者:
1453149997
时间:
2014-4-1 19:22
标题:
关于使用线程操作共享资源的问题
本帖最后由 1453149997 于 2014-4-3 17:03 编辑
我们知道,对于多线程,如果操作共享资源,要把资源和操作资源的方法都封装在一个单独的类里,对于操作资源的方法我们需要它们同步;
如 一个资源类F
ridge(冰箱)
public class Fridge{
private List<Food> foodList = new LinkedList<Food>();//Food代表一个描述食物的类
//1.往冰箱里放食物
public synchronized void setFood(Food food){
foodList.add(food);
}
//2.从冰箱里取食物
public synchronized Food getFood(){
return foodList.pollFirst();
}
}
问题:上面的方法setFood和setFood方法同步,setFood和getFood方法同步,getFood和getFood方法同步,但是我们知道,多个线程并发获取食物并不
会对数据的安全性造成影响,所以我不想让getFood和getFood同步,即多个线程取食物时不同步,该如何做?
作者:
林发明
时间:
2014-4-1 20:21
我觉的这个不太好实现:
因为同步的前提有三个:
1, 必须要有两个以上的线程
2, 必须是多个线程使用同一个锁
3, 必须保证同步中只能有一个线程在运行
既然让setFood和getFood方法同步,那么他们就要使用同一个锁,也就是getFood上必须有锁,既然有锁,必须同步啊
作者:
1453149997
时间:
2014-4-1 20:35
林发明 发表于 2014-4-1 20:21
我觉的这个不太好实现:
因为同步的前提有三个:
1, 必须要有两个以上的线程
此类问题其实可以使用JDK1.5的“读写锁”实现,但是在JDK1.5之前如何解决呢?至今仍在思考中。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2