如何创建将m个元素添加到所有子流程中的共享列表中的n个子流程?

时间:2019-04-24 23:11:21

标签: java multithreading

我想编写一个静态方法stressTest (int n, int m),该方法创建n个子流程,这些子流程将m个元素添加到所有子流程之间共享的MySafeList中。如果添加的元素数量与预期的数量(n×m)不同,或者在执行过程中引发异常,则该方法必须返回false。确保测试失败且MySafeList未同步。

然后我尝试使用静态列表并创建线程表。

import java.util.ArrayList;

class MySafeList extends ArrayList<Double>{

    static ArrayList<Double> mySafeList;

    public boolean add(Double d){
        mySafeList.add(d);
    }

    public int size(){
        return mySafeList.size();
    }

    public Double get(int i){
        mySafeList.get(i);
    }

    static boolean stressTest(int n, int m){
        Thread threads[] = new Thread[n]; //El nombre de tu variable se llama "threads"
        try{
            for(int i=0; i<n; i++){
                threads[i] = new Thread(new ThreadTest(1));
                threads[i].start();
                for(int j=0; j<m;j++){
                    Double d = new Double((double) j);
                    mySafeList.add(d);
                }
            }
        }catch(Exception e){
            return false;
        }
    }

    public static void main(String[] args) {
        MySafeList safeList = new MySafeList();
        stressTest(2,4);    
    }

}

但是我得到了

C:\Users\antoi\Documents\Programming\Julien\TD6_multi_threading>javac MySafeList.java
MySafeList.java:9: error: missing return statement
        }
        ^
MySafeList.java:17: error: missing return statement
        }
        ^
MySafeList.java:33: error: missing return statement
        }
        ^
Note: MySafeList.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
3 errors

1 个答案:

答案 0 :(得分:0)

方法stressTest()是静态的。类变量mySafeList不是。将mySafeList设为静态,或将方法stressTest()设为静态。

此外,mySafeList只能包含Double个对象。您正在尝试将int原语添加到mySafeList中。您需要将int转换为Double。一种方法是...

Double d = new Double((double) j);