Мой основной класс генерирует несколько потоков на основе некоторых правил. (20-40 потоков живут долгое время). Каждый поток создает несколько потоков (короткое время) -> Я использую executer для этого. Мне нужно работать над многоразмерными массивами в коротких временных потоках -> Я написал его, как в коде ниже ->, но я думаю, что он не эффективен, так как я передаю его столько раз, сколько столько потоков/задания --. Я попытался получить доступ к нему непосредственно из потоков (объявив его общедоступным -> без успеха) -> будет рад получить комментарии/советы о том, как его улучшить. Я также рассмотрю следующий шаг, чтобы вернуть массив измерения 1 (что может быть лучше, просто обновить его в классе Assetfactory) -> и я не знаю, как это сделать. см. Код ниже. благодаря PazДоступ к многопоточным массивам Java для больших массивов
import java.util.concurrent.*;
import java.util.logging.Level;
public class AssetFactory implements Runnable{
private volatile boolean stop = false;
private volatile String feed ;
private double[][][] PeriodRates= new double[10][500][4];
private String TimeStr,Bid,periodicalRateIndicator;
private final BlockingQueue<String> workQueue;
ExecutorService IndicatorPool = Executors.newCachedThreadPool();
public AssetFactory(BlockingQueue<String> workQueue) {
this.workQueue = workQueue;
}
@Override
public void run(){
while (!stop) {
try{
feed = workQueue.take();
periodicalRateIndicator = CheckPeriod(TimeStr, Bid) ;
if (periodicalRateIndicator.length() >0) {
IndicatorPool.submit(new CalcMvg(periodicalRateIndicator,PeriodRates));
}
}
if ("Stop".equals(feed)) {
stop = true ;
}
} // try
catch (InterruptedException ex) {
logger.log(Level.SEVERE, null, ex);
stop = true;
}
} // while
} // run
Вот класс CalcMVG
public class CalcMvg implements Runnable {
private double [][][] PeriodRates = new double[10][500][4];
public CalcMvg(String Periods, double[][][] PeriodRates) {
System.out.println(Periods);
this.PeriodRates = PeriodRates ;
}
@Override
public void run(){
try{
// do some work with the data of PeriodRates array e.g. print it (no changes to array
System.out.println(PeriodRates[1][1][1]);
}
catch (Exception ex){
System.out.println(Thread.currentThread().getName() + ex.getMessage());
logger.log(Level.SEVERE, null, ex);
}
}//run
} // mvg class
Я не вижу конкретного вопроса в вашем сообщении выше. Просьба уточнить это для нас. –
Здесь есть два вопроса, один из них - вопрос проверки кода, а другой - вопрос SO, но неясно. Эти вопросы не только не относятся к одному вопросу о SO, они принадлежат на разных * сайтах *. Вопросы обзора кода можно найти здесь: http://codereview.stackexchange.com/ –
спасибо, мои вопросы: 1.Я ищу для лучшего доступа к массиву вместо отправки его в качестве параметра созданного потока. 2. Как получить доступ назад от созданной задачи к массиву в классе AssetFactory. – user2319608