문제

스레드를 사용할 때 때때로 공간적 컨텍스트에서 물체 사이의 3 차원 상호 연결을 함께 직조하는 것으로 시각화됩니다. 이것은 일반적인 사용 사례 시나리오는 아니지만 내가하는 일을 위해서는 그것에 대해 생각하는 유용한 방법입니다.

스레딩에 도움이되는 API가 있습니까?

스레드를 프로세스로 개념화하지 않는 방식으로 스레드를 사용 했습니까?

도움이 되었습니까?

해결책

스레딩에 도움이되는 API가 있습니까?

당신은 Appart를 의미합니다 java.util.concurrent? 기능적 자바 시작하는 멀티 파트 튜토리얼에 설명 된대로 동시 프로그래밍에 도움이되는 일부 구성이 있습니다. 여기.

스레드를 프로세스로 개념화하지 않는 방식으로 스레드를 사용 했습니까?

예, 스레드가 전혀 개념화되지 않는 정도까지. 예를 들어 비동기 작업 실행자를 사용하십시오. 그것은 덮개 아래에 실을 사용하지만 나는 그것들을 보지 못하고 나는 그것들을 신경 쓰지 않습니다. 그들은 작업 운영자에 의해 완전히 관리됩니다.

표지 아래에서는 모두 실이 단지 실입니다. 그러나 우리가 개별 스레드에 대한 배려를 중단하고 어떻게 든 코드를 넣고 일정 기간 동안 실행할 수있는 여러 슬롯으로 생각하면됩니다. 우리는 더 높은 수준의 추상화에 도달하기 시작합니다.

에이전트/배우는이를 수행하는 일반적인 방법입니다. 배우는 상태 덩어리가있는 스레드와 같습니다. 그러면 코드를 보내서 "시간이있을 때 상태에 이것을하십시오"또는 그 라인을 따라 무언가를 말할 수 있습니다.

다른 팁

가장 먼저

일반적인 면책 조항 : 모든 추상화 수준을 사용하는 모든 언어로 동시 프로그래밍은 다음과 같습니다. 딱딱한 그리고 복잡한 많은 위험이 있습니다. 참작하다:

  • 동시 프로그래밍은 모든 응용 프로그램을 크기로 복잡하게 만듭니다
  • 단위 테스트 중요한 섹션은 어렵고 때로는 불가능합니다
  • 동시 코드에서 발생하는 버그를 재현하는 것은 다음과 같습니다 열심히 그리고 아키텍처, OS 풍미, 버전 등에 크게 의존합니다 ...

자바 동시 API

Java는 개발자에게 가능한 한 쉽게 동시 프로그래밍을 만드는 데 큰 도움이되었습니다. 대부분의 경우, 당신은 그것을 볼 수 있습니다 java.util.concurrent 필요한 대부분의 추상화가 있습니다.

  • Runnable 인터페이스 및 Thread 확장 할 수있는 개체. 코드를 던지면 실행할 준비가되어 있습니다.
  • 멋진 세트 Executors: 상수 수영장, 다이내믹 풀, 예약 또는 무엇이든. 그냥 던져 Runnable 그것에 그리고 그것은 나머지를합니다.
  • Semaphore에스 그리고 자물쇠 모든 종류 중에서 일반적인 잠금 기술을 구현해야 할 필요가 있습니다.
  • 내장 wait() 그리고 notify() 모든 객체에 대한 API.

용도

소프트웨어 엔지니어로서 당신을 위해 남겨진 유일한 것은 당신이 글을 쓰고 있는지 확인하는 것입니다. 옳은 암호. 즉, 당신은 당신이 자신을 노출시키는 위험한 상황을 알고 있어야합니다.

  • 이중 자물쇠 - 두 개 이상의 스레드가 순서가없는 리소스를 기다리는 상황에서 무한 대기 루프를 렌더링합니다.
  • livelock - 공유 자원으로 정중하게 다른 사람에게 길을 주려고 노력하지만 결국 복도에서 두 사람이 서로 걸어 가서 좌우로 끊임없이 함께 움직이는 것을 고려하십시오).
  • 굶주림 - 단일 스레드가 단일 공유 리소스의 대부분 또는 전부를 차지하므로 다른 스레드가 액세스하지 못하게됩니다.

요점 (또는 사용시기)

동시성이 응용 프로그램 동작을 직접 개선 할 때만 스레드를 사용하십시오.

IO/네트워크/하드웨어 결합 리소스를 기다리는 경우 ~하다 다른 일을 계속할 수 있도록 실을 뿌립니다.

CPU 바운드 계산을 우아하게 분할하려고한다면 하지 마라 스레드를 사용하십시오. 당신은 결국 성능을 악화시킬 수 있습니다.

스레드를 사용하는 경우 위험을 철저히 고려하고 트리플 확인했는지 확인하십시오. 예외적 인 상황을 놓치지 않았습니다.

유용한 (온라인) 리소스

일에 들어가는 가장 빠른 방법은 Sun 동시성 튜토리얼. 그 외에는 좋은 책을 얻으십시오.

행운을 빕니다 :)

동시성은 다루기위한 깊고 복잡한 주제입니다. 와 같은 책 실제로 Java 동시성 도움이 될 수 있습니다.

보다 동시 유틸리티 개요 스레딩의 API 용. 차단식u003CE> 예를 들어 유용 할 수 있습니다.

요소를 검색 할 때 대기열이 비어있을 때까지 대기하는 작업을 추가로 지원하고 요소를 저장할 때 큐에서 공간을 사용할 수있을 때까지 대기하는 큐를 추가로 지원합니다.

보다 CountdownLatch

하나 이상의 스레드가 다른 스레드에서 수행되는 일련의 작업 세트가 완료 될 때까지 기다릴 수있는 동기화 보조 장치.

그리고 사이클리 배저 흥미로운 행동을 위해.

스레드 세트가 서로 공통 장벽 지점에 도달하기를 기다릴 수있는 동기화 보조원.

편집하다: 나는 지금 실제로 Java 동시성을 읽고 있습니다. 아주 좋습니다.

스레드를 사용할 때 때때로 공간적 컨텍스트에서 물체 사이의 3 차원 상호 연결을 함께 직조하는 것으로 시각화됩니다.

예를 들어 600 스레드를 어떻게 개념화 하시겠습니까? 왜 그것들을 동시에 실행하는 여러 실행 스레드라고 생각하지 않겠습니까?

스레딩에 도움이되는 API가 있습니까?

나는 가장 단순하고 가장 간단한 것이 당신이 찾을 수있는 첫 번째 경기라고 제안합니다. http://www.google.co.uk/search?q=java+threads

스레드를 프로세스로 개념화하지 않는 방식으로 스레드를 사용 했습니까?

스레드는 프로세스가 아니기 때문에 스레드를 프로세스로 생각한 적이 있다고 말할 수는 없습니다. (기존 버전의 Linux를 제외하고) 프로세스는 기본적으로 기본적으로 메모리/객체를 공유하지 않으며, 완전히 독립적으로 실행됩니다 (일반적으로 다른 프로그램, 다른 언어로 작성됨)도 다른 API를 사용하여 다르게 시작합니다.

멀티 스레딩이 복잡하다는 견해가 있습니다. 사실 나는 반대라고 말할 것입니다. 멀티 스레드 프로그래밍을 사용하려면 코드를 간단하고 이해하기 쉽고 이성에 대해 간단하게 만들어야합니다. 이것은 경험이 필요하지만, 당신의 목표는 단순합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top