3 minute read

자바프로그래밍 - 9

  • 스레드
  • 동기화
  • 네트워크 소켓



스레드 - 1. 스레드와 프로세스

  • 프로세스
    • 현재 CPU의 실행 권한을 가지고 있는 인스턴스

      즉, ‘실행 중인 프로그램’

    • 여러 프로세스가 하나의 CPU에서 실행되는 것이 ‘멀티 태스킹’
    • 여러 CPU가 작업하는 것이 ‘멀티 프로세스’
  • 스레드
    • 프로세스 안에서 실행되는 세부 작업 단위(스레드가 모여서 프로세스로)
    • 하나의 프로세스 안에 여러 스레드가 실행되는 것이 ‘멀티 스레드’

      일반적인 프로세스보다 성능 UP!

  • 참고 링크(잘 써놓으셨더라!)



스레드 - 2. 스레드 생성(2가지 방법)

  1. java.lang.Thread 클래스를 이용하는 방법
    1) Thread 클래스를 상속받는 클래스를 작성.
    2) public void run() 메소드를 오버라이딩 한다.
    3) main() Thread 클래스를 상속하는 클래스의 객체를 생성한다.
    4) 해당 객체의 start() 메소드를 호출하여 스레드를 실행시킨다.

  2. java.lang.Runnable 인터페이스를 이용하는 방법
    1) Runnable 인터페이스를 구현하는 클래스를 작성한다.
    2) public void run() 메소드를 오버라이딩 한다.
    3) main() 메소드에서 Runnable 인터페이스를 구현하는 클래스의 객체를 생성한다.
    4) Thread 클래스의 객체를 생성하면서 생성자의 인자로 Runnable 인터페이스를 구현 클래스의 객체를 전달한다.
    5) Thread 객체의 start() 메소드를 호출한다.



스레드 - 3. 스레드의 상태

  • new
    • Thread클래스를 상속 or Runnable 인터페이스 구현한 클래스
    • new 키워드로 객체를 생성한 상태
  • runnable
    • 생성된 스레드에 start()메서드 호출

      실행 준비 상태(실제 실행X)

  • running
    • 스레드가 동작하는 상태, 즉 run() 메서드 실행되는 상태
  • priority
    • runnable 상태 스레드의 우선권이 가장 높다
    • 자바의 우선권은 1부터 10까지 값을 가진다

      -> 우선권이 낮은 스레드는 실행할 기회 적음 = ‘기아상태’

  • block
    • run() 메서드를 끝마치지 못하고 중간에 중지된 상태
    • 명시적 메서드(sleep, yield, join)를 통해서도 발생 가능
  • dead
    • run() 메서드를 모두 처리하여 스레드가 제거되는 상태



스레드 - 4. Main 스레드

  • 시작점 역할을 하는 main 메서드
    • main메서드 실행도 스레드가 담당
    • 이전의 모든 실습 예제에서도 main 스레드가 실행되고 있던 것!



스레드 - 5. Blocking 메서드

  • 스레드를 일시정지(block)시키는 메서드

  • sleep() 메서드
    • 메서드 인자로 지정된 시간(1/1000초)만큼 스레드가 block!

      -> 우선권이 낮은 스레드 실행 가능(기아상태 방지)

  • yield() 메서드
    • 우선권이 같은 스레드에게 실행 기회 양보
  • join() 메서드
    • 스레드의 종료 순서를 지정할 수 있다



동기화

  • 동기화 개념
    • 여러 스레드가 하나의 데이터를 공유할 때, 한 스레드의 작업이 끝날 때까지는 작업 내용이 공유되지 않도록 보장한다.
    • ‘synchronized’ 키워드를 사용하여 적용
  • 동기화 메서드 사용 방법
    • 메서드를 선언할 때 synchronized 키워드 지정
      • 접근지정자 synchronized 반환형 메서드명() {...}
    • 메서드 내 모든 코드가 동기화 됨
      • 특정 스레드가 해당 메서드 수행할 때 다른 스레드는 모두 block
  • 동기화 블록 사용 방법
    • 메서드 안에서 synchronized 키워드 블록을 사용
      • 접근지정자 반환형 메서드명() {
      • ...
      • synchronized(공유객체) {
      • ... }
      • ...
      • }
    • synchronized 블록만 동기화(메서드 내 모든 코드X)



네트워크 소켓 - 1. TCP/IP

  • TCP/IP 프로토콜
    • 두 시스템 간에 데이터 손상 없이 전송하도록 하는 통신 프로토콜
    • TCP 응용프로그램 사례

      email, FTP, 웹(HTTP) 등

  • TCP/IP 특징
    • 연결형 통신(한 번 연결하면 계속 전송 가능)
    • 보낸 순서대로 받아 응용프로그램에 전달
  • IP 주소
    • 네트워크 상에서 유일하게 식별될 수 있는 컴퓨터 주소
      1. 공인IP (ex. 학원 내 컴퓨터 모두 같은 주소)
      2. 사설IP (ex. 학원 내 컴퓨터 각각 다른 주소)
    • 문자열로 구성된 도메인 이름으로 바꿔서 사용
  • 데이터 전송 - 1. OSI 7계층
    • 7: 응용 계층
    • 6: 표현 계층
    • 5: 세션 계층
    • 4: 전송 계층
    • 3: 네트워크 계층
    • 2: 데이터 링크 계층
    • 1: 물리적 계층
  • 데이터 전송 - 2. 수/발신 과정
    • encapsulation

      : [데이터 -> 6 -> 5 -> … -> 1계층] 캡슐화 후 데이터 전송

    • decapsulation

      : [1 -> 2 -> … 6 -> 데이터] 캡슐해제 후 데이터 확인

네트워크 소켓 - 2. 포트

  • 통신할 응용프로그램을 식별하는 번호
    • 모든 응용프로그램은 하나 이상의 포트 생성 가능
  • 잘 알려진 포트(시스템이 사용하는 포트)
    • SSH 22, HTTP 80, FTP 21
    • 사용하지 않는 것을 권장

      본인 프로그램과 충돌 가능성



네트워크 소켓 - 3. 소켓 프로그래밍

  • 소켓이란,
    • TCP/IP 네트워크를 이용, 통신 프로그램을 작성하도록 지원하는 기술
    • 두 응용프로그램 사이 통신 링크의 양쪽 끝

      소켓은 특정 IP포트 번호와 결합

  • 소켓 활용한 통신 프로그램(서버<->클라이언트)

socketCorrespondence

  • Socket 클래스 (클라이언트 소켓에 사용)
    • Socket()

      : 연결되지 않은 상태의 소켓 생성

    • Socket(InetAddress address, int port)

      : 소켓 생성 후, IP주소와 포트번호에 대기하는 서버에 연결

    • Socket(String host, int port)

      : 소켓 생성 후, 호스트와 포트번호에 대기하는 서버에 연결

  • ServerSocket 클래스 (서버 소켓에 사용)
    • ServerSocket(int port)

      : 포트번호와 결합된 서버 소켓 생성

  • Socket클래스, ServerSocket클래스의 다양한 메서드 있음

Updated: