멀티스레드와 동시성

Ch02. 스레드 생성과 실행 - 로거 만들기

webmaster 2024. 8. 1. 13:44
728x90

어떤 스레드가 코드를 실행하는지 출력하기 위해 다음과 같이 긴 코드를 작성하는 것은 너무 번거롭다

System.out.println(Thread.currentThread().getName() + ": run()");

다음 예시와 같이 실행하면, 현재 시간, 스레드 이름, 출력 내용등이 한 번에 나오는 편리한 기능을 만들어보자.

 log("hello thread");
 log(123);

로거 만들기

MyLogger

 

  • util 이라는 패키지를 사용했다. 프로젝트 전반에 사용되는 유틸리티라는 뜻이다.
  • 현재 시간을 원하는 포멧으로 출력하기 위해 "DateTimeFormatter" 를 사용한다.
  • printf 에서 "%s" 는 문자열을 뜻한다. 인자를 순서대로 사용한다. 여기서는 현재 시간, 스레드 이름, 출력할 객체 순서이다.
    • 참고로 마지막의 출력할 객체는 문자열이 아니라 Object 타입인데, "%s" 를 사용하면 toString()을 사용해서 문자열로 변환 후 출력한다. 이렇게 Object 타입을 사용하면 문자열 뿐만 아니라 객체도 출력할 수 있다.
  • "%9s"는 다음과 같이 문자를 출력할 때 9칸을 확보한다는 뜻이다. 9칸이 차지 않으면 왼쪽에 그 만큼 비워둔다. 이 기능은 단순히 출력시 정렬을 깔끔하게 하려고 사용한다.
    • ) [ main]` : 앞에 5칸 공백 , [ Thread-0] : 앞에 1칸 공백
MyLogger 테스트 코드
  • 사용할 때는 지금과 같이 import static 을 사용하면 메서드 이름만으로 간단히 사용할 수 있다.
  • 스레드를 학습할 때는 스레드 이름, 그리고 해당 스레드가 언제 실행되었는지 확인하는 것이 중요하다.

 

728x90