Несколько экземпляров Java одного и того же класса совместно используют одни и те же запущенные объекты, но они не должны

Я делаю многопоточный алгоритм оптимизации Java, который инициирует различные экземпляры одного и того же подкласса по причине улучшения времени. У этого подкласса есть и другие подклассы.

Алгоритм ищет через пространство поиска оптимальное решение с помощью случайных движений. Поэтому, если я запускаю несколько его экземпляров, я должен воспользоваться преимуществами ядра моей системы и улучшить поиск, расширяя область поиска.

Я заметил, что первый экземпляр работает хорошо, но другие, кажется, разделяют запущенные объекты первого, выбирая информацию, которую они держат, даже когда она закончена.

Это не то, что я хочу; я хочу, чтобы любой из экземпляров был изолирован для других.

Я использую Executor Services:

Код:

ExecutorService executorService = Executors.newCachedThreadPool();
ExecutorCompletionService<float[][]> service = new ExecutorCompletionService<float[][]>(executorService);

IteratedGreedy[] ig = new IteratedGreedy[instances];
Future<float[][]>[] future = new Future[instances];

// launching instances:
for (int i=0; i<instances; i++)
    {       
    path = "\\" + i + ".txt";
    ig[i] = new IteratedGreedy(path);
    future[i] = service.submit(ig[i]);
    }

// retrieveing solutions:
for (int i=1; i<instances; i++)
    {
    solutions[i] = future[i].get();
        }

Как вы можете подумать, функция IteratedGreedy имеет свои собственные подклассы внутри.

Любая помощь приветствуется.

1 ответ

Проблема в том, что где-то в коде есть класс с глобальной статической переменной:

static float[][] matrix;

И тогда метод использует это:

SomeMethod()
    {
    int f = matrix[i][b];
    }

Решение состоит в том, чтобы изменить способ, которым метод получает объект:

float[][] matrix;

SomeMethod(float[][] matrix)
    {
    int f = matrix[i][j];
    }
Другие вопросы по тегам