黑马程序员技术交流社区

标题: 关于使用线程操作共享资源的问题 [打印本页]

作者: 1453149997    时间: 2014-4-1 19:22
标题: 关于使用线程操作共享资源的问题
本帖最后由 1453149997 于 2014-4-3 17:03 编辑

我们知道,对于多线程,如果操作共享资源,要把资源和操作资源的方法都封装在一个单独的类里,对于操作资源的方法我们需要它们同步;
如 一个资源类Fridge(冰箱)
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