책소개
📖 자바 병렬 프로그래밍
책추천 2
현업에서 쓰레드를 만들거나, Runnable을 구현하는 경우는 거의 없다.
실제 서버를 만들거나 하는 분들이나 보면 도움이 되지만 그래도 읽어보면 좋은책
쓰레드 상속하는 방법
Runnable을 익명내부 클래스로 사용하는 방법
✌ 두가지 방법중 뭐를 쓸것인가?
메소드를 오버라이딩 할 필요가 있을경우 : 쓰레드 상속
아니면 Runnable인터페이스 구현
롬복 어노테이션 @SneakyThrows
📌 자바에서는 스레드를 종료시킬 수 없다.
- stop()은 deprecated되었다.
47초 걸리던 코드를 극한의 자원을 활용하여 시간 단축
- ExecutorService
- CountDownLatch
latch를 카운트다운 시키고 끝날떄까지 await시켜야 한다.
동시성(Concurrency) vs 병렬성(Parallelism)
병렬성은 말그대로 동시에 진행되는것(각 코어별로 개별 쓰레드가 실행되는 것)
동시성은 왔다갔다 하는 것, 왔다갔다 이거처리 했다가 저거 처리했다가 정신없는 상태를 생각(하나의 코어에서 여러 쓰레드가 번갈아가면서 처리되는 것)
또 다른 형태의 Concurrency 모델
- Actor Model : Akka
- STM Model : Clojure라이브러리 활용
🎳 Akka에 대해 좀더
Akka란?
Akka는 동시 코드를 작성하고 작업할 때 다른 접근법을 제공해주는 프레임워크로, 액터 모델을 사용하며 함수형 프로그래밍 언어인 Erlang에서 영감을 받았다. Akka는 스칼라(Scala)로 만들어졌지만, 자바 API도 있다.
메이븐 의존성
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor_2.10</artifactId>
<version>2.2.3</version>
</dependency>
자바에서 액터를 이용하는 예
Message.java
import java.io.Serializable;
public class Message implements Serializable {
private final String message;
public Message(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
MessageActor.java
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.actor.UntypedActor;
import java.util.Date;
public class MessageActor extends UntypedActor {
@Override
public void onReceive(Object message) {
if(message instanceof Message) {
Message m = (Message) message;
System.out.printf("Message [%s] received at %s%n", m.getMessage(), new Date());
}
}
public static void main(String[] args) {
final ActorSystem system = ActorSystem.create("actorSystem");
final ActorRef actorRef = system.actorOf(
Props.create(MessageActor.class), "messageProcessor"
);
actorRef.tell(new Message("Hello actor system"), null);
}
}
- 자바 프로그래밍 면접 이렇게 준비한다.
🥇 국내 자바챔피언 2명
- 양수열
- 이희승
Critical path
동시에 실행하는 것 중에 가장 오래걸리는 것
이것을 줄여야 전체 실행시간이 줄어든다.
경쟁 상태(Race Condition)
공유하는 자원에 어떤게 먼저 접근하냐에 따라 결과가 달라질때
그러한 일로인해 문제 발생했을경우 "Race Condition"때문에 문제 발생했다고 표현한다.
데드락를 확인하는 방법
VisualVM (스레드 덤프를 떠서 확인한다)
heap dump - 메모리도 덤프를 떠서 볼 수 있다.
무어의 법칙
2년마다 성능이 2배로 증가할 것이다.
이 법칙은 이제 끝났다 (더이상 클럭이 빨라 지지않는다)
이제는 CPU코어갯수가 늘어 난다.
'Java' 카테고리의 다른 글
스터디할래 11주차 과제: Enum(feedback, 피드백) (0) | 2021.02.13 |
---|---|
11주차 과제: Enum (0) | 2021.02.13 |
스터디 할래 10주차 과제: 멀티쓰레드 프로그래밍 (0) | 2021.01.28 |
8주자 과제: 인터페이스(피드백) (0) | 2021.01.28 |
9주차 과제: 예외 처리(피드백) (0) | 2021.01.17 |