1

저는 성경을위한 텍스트 검색 프로그램을 작성 중이며 스레드를 사용하여 작업을 나눠서 실행 시간이 단축되도록하고 싶습니다. 나는 Java 프로그래밍에 익숙하지만 모든 "스레드"에 완전히 익숙합니다. 기본적으로이 프로그램은 성경의 개별 서적을 꺼내 텍스트를 읽고 단어를 검색 한 후 다음 책을 가져옵니다. 4 ~ 8 개의 스레드가 별도의 서적에서 동시에 작업 할 수 있도록 이것을 나눕니다.자바에서 스레드를 사용하여 병렬 프로그램을 병렬로 변환 하시겠습니까?

어떤 도움이 필요합니까?

public static void main(String args[]){ 

    String wordToSearch = ""; 
    String[] booksOfBible; 
    int bookPosition = 0; 
    ArrayList<String> finalList = new ArrayList<String>(); 

    getWord gW = new getWord(); 
    getBook gB = new getBook(); 
    checkBook cB = new checkBook(); 
    wordToSearch = gW.getWord(wordToSearch); 
    booksOfBible = gB.getFileList(); 
    //System.out.println(wordToSearch); 
    for(int i = 0; i < booksOfBible.length; i++){ 
     //System.out.println(booksOfBible[i]);//Test to see if books are in order 
     String[] verses = gB.getNextBook(booksOfBible, bookPosition); 
     //System.out.println(verses[0]);//Test to see if the books are being read properly 
     cB.checkForWord(wordToSearch, verses, booksOfBible[i], finalList); 
     bookPosition++; 
    } 
    for(int i = 0; i < finalList.size(); i++){ 
     System.out.println(finalList.get(i)); 
    } 
    System.out.println("Word found " + finalList.size() + " times"); 
} 
+1

'사전'을 작성하여 텍스트를보다 빠르게 검색 할 수 있습니다. 이 문제에 여분의 스레드를 던지면 도움이되지 않습니다. –

+0

* "도움이 필요하십니까?"* (특정) 질문이 있습니까? –

+0

멀티 스레딩에 들어가기 전에 몇 가지 자습서를 읽는 것이 좋습니다. 예를 들어 [this one] (http://www.ntu.edu.sg/home/ehchua/programming/java/J5e_multithreading.html)을 참조하십시오. 병렬 프로그래밍은 매우 어려우며 단일 스레드 프로그래밍 경험은 실제로이를 준비하지 못합니다. –

답변

0

당신은 Runnable를 구현하는 클래스를 생성하고 run() 방법 내부 검색 텍스트를 구현할 수 있습니다.

Thread t = new Thread(myRunnableObj); 
t.start(); 

은 아마도 당신은 또한 결과를 저장하기 위해 여러 작업자 스레드에 대한 데이터 구조가 필요합니다 생성자의 인수로 실행 가능한 객체와 새로운 Thread 객체를 생성하여 새 스레드에서 다음 실행 가능하다 . (

0

Executors.newFixedThreadPool 사용 : (using MySql fulltext searching 또는 다른 라이브러리 등)는 스레드 안전/동기화 된 데이터 구조 앤드류 톰슨은 지적 그러나

, 그것은 색인을 당신을 위해 빠른 전체 성경 수 있습니다 사용 확인 nbNeededThreads)를 사용하면 ExecutorService 인스턴스가 생기며이 작업을 통해 병렬 작업을 제출할 수 있습니다. 일단 "미래"의 목록을 얻으면, 당신은 그것들을 모니터 할 수 있고 그들의 모든 것이 끝났을 때를 알 수 있습니다.

ExecutorService service = Executors.newFixedThreadPool(4); 
ArrayList<Future> queue = new ArrayList<>(); 

for(int i = 0; i < booksOfBible.length; i++){ 
    Futur futurTask = service.submit(searchingTask); 
    queue.add(futurTask); 
} 

// TODO Monitor queue to wait until all finished. 
관련 문제