Я сортирую большой файл, читая по блокам (Arraylist), сортирую каждый массив с помощью Collections.sort с помощью специального компаратора и записываю отсортированные результаты в файлы, а затем применяю алгоритм сортировки слиянием ко всем файлам.
Я делаю это в одном потоке.
Получу ли я какое-либо повышение производительности, если я начну новый поток для каждого Collections.sort ()?
Под этим я подразумеваю следующее:
Я читаю из файла в List, когда List заполняется, я начинаю новый поток, где сортирую этот List и записываю во временный файл.
Тем временемЯ продолжаю читать из файла и начинаю новую тему, когда список снова заполняется ...
Еще один вопрос, который у меня есть:
Что лучше для сортировки:
1) Arraylistчто я заполняю, и когда он полон, применяем collection.sort ()
2) TreeMap, который я заполняю, мне не нужно его сортировать.(сортирует, когда я вставляю элементы)
ПРИМЕЧАНИЕ: я использую JAVA 1.5
ОБНОВЛЕНИЕ: это код, который я хочу использовать, проблема в том, что я повторно использую массив данных, который используетсяпо темам, а также мне нужно дождаться завершения всех потоков.как мне исправить?
int MAX_THREADS = Runtime.getRuntime().availableProcessors();
ExecutorService executor = Executors.newFixedThreadPool(MAX_THREADS);
List datalines = ArrayList();
try {
while (data != null) {
long currentblocksize = 0;
while ((currentblocksize <= blocksize) && (data = getNext()) != null) {
datalines.add(data);
currentblocksize += data.length();
}
executor.submit(new Runnable() {
public void run() {
Collections.sort(datalines,mycomparator);
vector.add(datalines);
}
});