2010-03-19 9 views
2

스레드에 문제가 있습니다. 나는 어떻게 작동 하는지를 이해하지만 모두 같은 방법을 사용하기 때문에 완전히 다른 일을하는 동시에 다른 스레드를 실행하는 방법은 무엇입니까?Java에서 다른 스레드를 실행하려면 어떻게해야합니까?

저에게는 항상 동일한 표준 방법을 사용하여 동일한 작업을 수행하는 것으로 보입니다.

그래서 큰 .txt 파일이 있는데 각 행을 통과하여 줄을 서기를 원한다고 가정 해 봅시다. 이 경우 각 스레드가 .txt 파일의 1/10을 수행하도록하고 싶습니다. 그러나 스레드가 서로 통신 할 수있는 방법과 각 스레드가 올바른 부분을 구성 할 수있는 방법을 이해할 수 없습니다.

누구든지 설명하거나이 일을 도와 줄 수 있습니까? 대단히 감사하겠습니다!

+1

이것은 큰 질문입니다. 어쩌면 당신은 그것을 찌르는 데 약간의 코드를 고려해야하고이 질문에도이를 포함시켜야합니다. – svrist

+0

동시에 여러 스레드를 사용하여 동일한 코드에 액세스하는 것이 합리적인지 고려해야합니다. 각 행에 대해 수행하는 작업이 매우 작 으면 파일을 읽는 데 필요한 I/O 비용이 상대적으로 많고 멀티 스레딩이 도움이되지 않습니다. 그 라인의 URL에서 파일을 다운로드하는 것과 같이 더 큰 것을한다면, 좋은 생각 일 수 있습니다. – Thilo

답변

6

java.lang.Thread (이상 - java.lang.Runnable 구현)을 확장하고 새 개체의 생성자에 인수를 전달할 수 있습니다. 텍스트 파일의 예를 들면 다음과 같습니다

public FileReader implements Runnable { 
    private int startLine; 
    private int endLine; 
    public FileReader(int startLine, int endLine) { 
     // assign the params to the fields 
    } 

    public void run() { 
     // use the params to read the appropriate lines 
    } 
} 

을하고 당신이 할 수있는 : 내가 아는 한

new Thread(new FileReader(1, 10)).start(); 
new Thread(new FileReader(11, 20)).start(); 
new Thread(new FileReader(21, 30)).start(); 
+0

Bozho, 그게 많이 도움이되었습니다. 정말 고마워. 실험을 조금 해보고 나중에 피드백으로 돌아올 것입니다. 다른 사람이주의해야 할 사항이 있으면 알려주세요. 다시 한 번 감사드립니다! –

+0

@CrisCarter 나는 당신이 이것을 알지 못하지만 어떤 대답이 당신에게 많은 도움을 주거나 (또는이 질문과 같이) 당신의 원래 질문에 실제로 대답한다면 당신은 위와 아래의 투표 화살표 아래에있는 체크를 눌러서 받아 들여야합니다. 당신이 받아들이려는 대답. 그런 식으로 평판을 높이고 다른 사람들은 당신을 도우 려합니다. – Andy

-2

, 스레드가 병렬로 실행되는 독립적 인 조각하고 마스터 스레드 (일반적으로 메인 스레드는) 항상있다 병렬 실행중인 작업자 스레드를 제어합니다. 마스터 스레드가 해당 작업을 관리하므로 스레드가 서로 통신 할 필요가 없습니다.

경우에 따라 작업자 스레드에 행 번호 (thread1의 경우 0 ~ 10, 스레드 2의 경우 11 ~ 20)를 나타내는 인수를 보내도록 마스터 스레드를 가질 수 있습니다. 작업자 스레드는이 숫자를 입력으로 사용하여 파일을 처리합니다 따라서.

4

요즘에는 기본 스레드로 문제를 해결하는 대신 java.util.Concurrent을 사용해야 할 것입니다. 물론 적절한 위치에서 사용할 수도 있습니다. 스레딩은 꽤 큰 주제이지만, Concurrent 패키지의 잘 정의 된 관용구를 사용하면 좀 더 견딜 수 있습니다.

관련 문제