list是ArrayList类的对象
F类要每隔几秒就往里写东西,
A类要每隔几秒都读取list,并会删除里面的数据
G类要每隔一秒都读取list,并显示出来。
F类和A类分别起一个线程,同时执行,对list操作请问要怎么设计?list要放在哪里?其实我在做操作系统的实验,磁盘移臂调度算法。F类模拟动态生成对磁盘的访问请求,A类模拟调度算法选择一个请求执行。
G类就是GUI了,要动态显示请求的生成与相应。list里面装的就是多个请求。
F类要每隔几秒就往里写东西,
A类要每隔几秒都读取list,并会删除里面的数据
G类要每隔一秒都读取list,并显示出来。
F类和A类分别起一个线程,同时执行,对list操作请问要怎么设计?list要放在哪里?其实我在做操作系统的实验,磁盘移臂调度算法。F类模拟动态生成对磁盘的访问请求,A类模拟调度算法选择一个请求执行。
G类就是GUI了,要动态显示请求的生成与相应。list里面装的就是多个请求。
ArrayList是非线程安全的。建议直接使用
ArrayBlockingQueue
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;
}
}
}大概是这样吧,也可以优化一下!
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.
这个好像线程不安全吧