2012-05-02 6 views
3

멀티 스레드의 경우 Java 토지의 동시성은 &이며, 다중 스레드로 만들 코드를 "작업"으로 분리하고 해당 작업을 일종의 실행 프로그램 서비스에 제출하는 것입니다 또는 스레드 풀. (그렇다면, 무엇을) Java 동시성 및 작업

  • 이 작업은 어떤 객체 방법 일 수있다, 또는 특별한 무언가를해야 않습니다

    내가 궁금하다?

  • 이 작업이 CPU-, IO- 바운드인지 또는 다른 작업인지 어떻게 결정합니까? "죽은 공짜"또는 다른 결정 요인은 무엇입니까?

미리 알려 주셔서 감사합니다.

+2

코드가 io인지 cpu인지를 결정하는 방법은 프로파일 러에서 코드를 실행하는 것입니다. 다른 것은 단지 추측이며 일반적으로는 잘못입니다. – jtahlborn

+0

@jtahlborn - 작업에 DNS 조회가 포함되어 있고 웹 사이트에서 다운로드 한 것이 있으면 I/O 바운드가된다는 사실을 알 수 있습니다. 그것은 추측이 아닙니다.) –

+0

@MartinJames - 여전히 추측입니다. 같은 lan (또는 정말로 작은 파일)에있는 다른 컴퓨터에서 다운로드 한 다음 그 결과를 계산할 수 있습니다. – jtahlborn

답변

2

ExecutorService에서보세요 :

  • submit(Callable)
  • submit(Runnable)

당신의 작업은 아마 두 개의 인터페이스 (항상 다른 방법을 호출 할 수있는) 중 하나 여야합니다. 당신이 그것을 내의 모든 입/출력 작업을 수행 할 경우 작업이 아마 바인딩 IO됩니다

: 소켓에 쓰기, 소켓에서 읽기, 파일 쓰기, 파일에 읽기, IE 등

+0

그래서'ExecutorService'는 태스크의'run()'또는'call()'메소드 (적용 가능한 것 중)를 호출하고 그 메소드의 정의가 무엇인지에 따라 태스크가 묶여있는 것을 결정합니다. 그것은 공정한 일반화인가? – IAmYourFaja

+0

@AdamTannon 그게 전부에요. 원래 질문에 대한 jtahlborn의 의견을 살펴보십시오. – Jeffrey

0

Threads은 일반적으로 Runnable을 구현하는 클래스에서 찾은 코드를 실행합니다.

0

작업은 어떤 개체의 어떤 메서드가 될 수 있습니까? 아니면 특별한 것이어야합니까 (그렇다면 무엇입니까?)?

아무 것도 될 수 있습니다. 큰 문제는 다른 스레드와 공유되는 개체가 작업에 포함될 가능성이 크다는 것입니다. 이러한 객체에 대한 액세스가 스레드로부터 안전한지 확인해야합니다. 그것은 복잡한 주제입니다. Goetz 외의 "Java Concurrency in Practice"는 아주 좋은 책입니다.