Являются ли члены объекта потокобезопасными для Callable & ExecutorService - PullRequest
0 голосов
/ 15 февраля 2012

Являются ли члены объекта поточно-ориентированными, если я передаю один и тот же объект различным Callables, а затем ExecutorService? В моем примере классификатор имеет свойства данных обучения, тестовых данных и сети. Все они используются в методе call () класса Callable путем вызова методов классификатора. Один и тот же объект классификатора передается каждому Callable.

   for (int i = 0; i < this.cvCount; i++) 
   {
     classifier.setTrainingsData(getTrainingSet(i, testSize));
     classifier.setTestData(getTestSet(i, testSize));
     Callable<XVErrors> callable = new ClassifierCallable<Classifier>(classifier);
     Future<XVErrors> t = this.executor.submit(callable);
     this.results.add(t);
   }

... в ClassifierCallable

public XVErrors call() throws Exception {
        XVErrors xv = new XVErrors();
        xv.addTrainingError(classifier.train()); 
        xv.addTestError(classifier.test());
        return xv;
    }

У меня такое чувство, что мне нужно сделать глубокую копию объекта классификатора и передать его, потому что, когда я отлаживаю, например, Метод train () ошибка в сети после окончания обучения (разные tmp и tmp2).

public TrainingError train{...

do {
    trainingAlgorithm.iteration();
    epoch++;
    double tmp = trainingAlgorithm.getError();
} while (tmp > trainingErrorThreshold);

double tmp2 = trainingAlgorithm.getError();
...
}

1 Ответ

0 голосов
/ 15 февраля 2012

Очевидно, это зависит от того, как реализован ваш объект. Если вы ожидаете, что ваш объект будет доступен для нескольких потоков, то вы сами должны выяснить, как сделать этот доступ потокобезопасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...