Нашел еще в интернете статью по Executor. Покопался, вроде немного разобрался, что да с чем, но, видимо, не полностью. Все испортила какая-то неведомая ошибка:
Цитата
Exception in thread "main" java.util.concurrent.RejectedExecutionException: Task main.Main$Task@566dab9b rejected from java.util.concurrent.ThreadPoolExecutor@3a1d7971[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 100000]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2048)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:821)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1372)
at main.Main.calcProperNumber1(Main.java:71)
at main.Main.main(Main.java:30)
В таком коде:
» Спойлер (нажмите, чтобы прочесть) «
Это сама распараллеливаемая функция
Код
public static class Task implements Runnable
{
public double[][] a1;
public double[] x1, l1;
public Task(double[][] a, double[] x)
{
a1 = a;
x1 = x;
}
@Override
public void run()
{
// double xk[] = new double[x1.length];
for (int i = 0; i < a1.length; i++)
for (int j = 0; j < x1.length; j++)
xk[i] += a1[i][j] * x1[j];
}
}
А это вызывающая функция
Код
public static double calcProperNumber1(double[][] a, double[] x, double[] l)
{
double currentLambda, lastLambda = 0.0d;
Thread threads[] = new Thread[100000];
ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool();
while (true) {
Arrays.fill(xk, 0);
for (int i = 0; i < threads.length; i++)
{
Task task = new Task(a,x);
executor.execute(task); //вот тут ошибка вылезает
}
executor.shutdown();
try
{
executor.awaitTermination(1, TimeUnit.DAYS);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
...........................
Может, кто сталкивался?