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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1453149997 中级黑马   /  2014-4-1 19:22  /  1252 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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同步,即多个线程取食物时不同步,该如何做?

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

2 个回复

倒序浏览
我觉的这个不太好实现:
因为同步的前提有三个:
1,        必须要有两个以上的线程
2,        必须是多个线程使用同一个锁
3,        必须保证同步中只能有一个线程在运行
既然让setFood和getFood方法同步,那么他们就要使用同一个锁,也就是getFood上必须有锁,既然有锁,必须同步啊

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
林发明 发表于 2014-4-1 20:21
我觉的这个不太好实现:
因为同步的前提有三个:
1,        必须要有两个以上的线程

此类问题其实可以使用JDK1.5的“读写锁”实现,但是在JDK1.5之前如何解决呢?至今仍在思考中。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马