TIL. 소켓 통신과 스레드

hyuko·2023년 2월 7일
0

스레드

자바의 스레드 이해하기

소프트웨어 개발자로서, 멀티스레딩을 이해하는 것이 중요하다.
멀티스레딩은 단일 프로스세 내에서 여러 스레드를 동시에 실행할 수있는
컴퓨터 아키텍처 및 운영체제의 기능이다.

  • 스레드는 프로세스 내에서 가볍고 독립적인 실행 단위이다.

각 스레드에는 자체 스택, 프로그램 카운터 및 로컬 변수가 있습니다.
스레드는 프로세스의 힙을 공유하고, 메모리에서 동일한 변수와 객체에
액세스 할 수 있습니다. 자바에서 스레드는 스레드 클래스를 확장하거나
실행가능한 인터페이스를 구현하여 생성된다.

자바에서 왜 스레드를 사용하는가?

  • 여기서 자바어플리케이션에서 스레드를 사용하는 데는 몇가지 이유가있다.
  1. 성능향상: 여러 스레드를 활용하여 여러 작업을 병렬로 실행할 수 있도록
    하여 애플리케이션의 성능을 향상시킬수 있습니다. 이것은 더 빠른 완료 시간과
    향상된 반응성으로 이어질 수 있다.

  2. 더 나은 리소스 활용: 스레드를 사용하면 여러 CPU 코어를 활용하여
    시스템 리소스를 더 잘 활용할 수 있습니다. 이것은 시스템 자원을 보다
    효율적으로 사용하고 전반적인 성능을 향상시킬 수 있다.

  3. 반응성: 스레드를 활용하면, 장기간 실행되는 작업을 수행하는 동안에도
    어플리케이션이 반응하도록 할 수 있다

자바에서 스레드를 만드는 방법

  • 자바에서 스레드를 만드는 방법에는 두 가지 방법이있다.
  1. 스레드 클래스의 확장: 스레드 클래스를 확장하여 스레드를 만들려면
    스레드 클래스를 확장하고 run() 메서드를 재정의 (오버라이드)해야한다.
    run() 메서드에는 스레드에 의해 실행이 될 코드가 포함되어 있다.

  2. Runnable 인터페이스의 구현: Runnable 인터페이스를 구현하여
    스레드를 만들려면 run() 메서드를 구현해야한다. 이 방법은 스레드에
    의해 실행될 코드를 포함한다. 그런 다음 스레드는 Runnalbe 클래스의
    인스턴스를 Thread 객체의 생성자에게 전달하여 생성된다.

스레드를 생성 후 start() 메서드를 호출하여 시작할 수 있습니다.

public class LoopThread extends Thread {

    private String threadName;

    public LoopThread(String threadName) {
        this.threadName = threadName;
    }

    @Override
    public void run() {

        for (int i = 0; i < 10; i++) {
            System.out.println(threadName + ": " + i);

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

=================================================

public class ThreadTest {

    public static void main(String[] args) {
        LoopThread loopThread1 = new LoopThread("홍길동");
        LoopThread loopThread2 = new LoopThread("김유신");
        LoopThread loopThread3 = new LoopThread("이순신");
        LoopThread loopThread4 = new LoopThread("강감찬");

        loopThread1.setPriority(10);
        System.out.println(loopThread1.getPriority());
        System.out.println(loopThread2.getPriority());
        System.out.println(loopThread3.getPriority());
        System.out.println(loopThread4.getPriority());

        loopThread1.start();
        loopThread2.start();
        loopThread3.start();
        loopThread4.start();


    }
}

스레드에는 우선순위라고 있습니다.
getPriority()라는 함수로 우선순위를 체크할 수 있고
마찬가지로 get이 있다면 set 이 있다.
set으로 우선순위를 설정하여 컨트롤 가능합니다.

이때 스레드의 우선순위는 숫자가 높을수록 우선순위가 높다.
스레드의 우선순위는 1~10이다.


소켓 통신

우선 그림을 통해 소켓 통신의 원리에 대해 알아보자

서버라는 곳에 클라이언트가 여러명 연결이 되어서
양방향 통신을 하는 것으로 클라이언트당 연결이 될 때
소켓하나가 생성이 되는 꼴이다.

그 소켓이 생성이 될 때는 각각 server에 있는 ip정보와
port정보를 통해 만들어지며 동일하지 않으면 접속이 되지않는다.

profile
백엔드 개발자 준비중

0개의 댓글