2012-05-01 3 views
0

Мне нужно прочитать несколько очень больших файлов txt и вам нужно либо использовать несколько потоков, либо один поток, чтобы сделать это в зависимости от ввода пользователя.Threading при чтении большого файла txt в java?

Скажем, у меня есть основной метод, который получает пользовательский ввод, и пользователь запрашивает один поток и хочет обработать 20 файлов txt для этого потока. Как бы я это сделал? Обратите внимание, что приведенный ниже код не является моим кодом или его настройкой, а только тем, что является «идеей».

Пример:

int numFiles = 20; 
int threads = 1; 

String[] list = new String[20]; 
for(int i = 1; i < 21; i++){ 
    list[i] = "hello" + i + ".txt";//so the list is a hello1.txt, hello2.txt, ..., hello20.txt 
} 

public void run(){ 
//processes txt file 
} 

Так что в итоге, как бы я сделать это с одной нитью? С 20 потоками?

+0

Можете ли вы пометить свой вопрос на языке, который вы используете (Java, я думаю)? – assylias

+0

Спасибо, что указали это. – user1261445

ответ

3

Похоже, вам нужен настраиваемый пул потоков, и каждая операция чтения файла - это задание, которое должно быть отправлено в этот пул.

Когда пользователь указывает, сколько потоков будет использоваться, вы должны правильно настроить пул, отправить набор заданий на чтение файлов и позволить пулу разбирать выполнение.

В мире Java вы должны использовать метод фабрики Executors.newFixedThreadPool и отправлять каждое задание как Callable. Here's an article from IBM на пуле потоков Java.

+0

Можете ли вы привести пример? – user1261445

+0

И проект указывает, что мы должны делать это либо с одним потоком, либо с количеством потоков, равным количеству текстовых файлов, поэтому случай с 20 файлами, которые нуждаются в обработке одним потоком, является случаем. – user1261445

+0

На самом деле, вполне возможно, что вы будете МЕДИТЬ ВНИМАНИЕ приложение, если вы попытаетесь использовать несколько потоков для чтения разных частей файла. Стандартное аппаратное обеспечение на магнитных дисках (и ОС) оптимизировано для чтения файлов последовательно, а не параллельно. Подумайте «движение головки диска» ... –

Смежные вопросы