list是ArrayList类的对象
F类要每隔几秒就往里写东西,
A类要每隔几秒都读取list,并会删除里面的数据
G类要每隔一秒都读取list,并显示出来。
F类和A类分别起一个线程,同时执行,对list操作请问要怎么设计?list要放在哪里?其实我在做操作系统的实验,磁盘移臂调度算法。F类模拟动态生成对磁盘的访问请求,A类模拟调度算法选择一个请求执行。
G类就是GUI了,要动态显示请求的生成与相应。list里面装的就是多个请求。

解决方案 »

  1.   

    需要同步的
    ArrayList是非线程安全的。建议直接使用
    ArrayBlockingQueue 
      

  2.   

    可以把List放在F类里,
    class F{
    List<FData> list = new ArrayList<FData>();public void addFData(FData d){
          synchronized(F.this){
              list.add(d);
          }
    }public List<FData> getFData(){
          synchronized(F.this){
              List<FData> tmp = list;
              list = new ArrayList<FData>();
              
              return tmp;
          }
    }
    }大概是这样吧,也可以优化一下!
      

  3.   

    楼上似乎没有回答清楚List放哪里。1. 用一个新类封装 add, get 操作,(类似楼上写的,)public class   Queue{ 
    List <FData>   list   =   new   ArrayList <FData> (); public   void   addFData(FData   d){ 
                synchronized(list){ 
                        list.add(d); 
                } 
    } public   FData   getFData(){ 
                synchronized(list){ 
                        if (list.size()>0){
                            return   list.get(0); 
                         }
                       
                } 
    } 2. 楼主问题 (List放哪里?)
        a. 主线程new一个Queue的对象 q, 如在GUI线程做亦可。
        b. 在主线程中把q赋值给F, A的对象。这样实现了F, A线程共用一个q.
      

  4.   

    放在F或者A里面都可以啊F类和A类分别起一个线程,同时执行,对list操作
    这个好像线程不安全吧