소프트웨어 개발자로서, 멀티스레딩을 이해하는 것이 중요하다.
멀티스레딩은 단일 프로스세 내에서 여러 스레드를 동시에 실행할 수있는
컴퓨터 아키텍처 및 운영체제의 기능이다.
각 스레드에는 자체 스택, 프로그램 카운터 및 로컬 변수가 있습니다.
스레드는 프로세스의 힙을 공유하고, 메모리에서 동일한 변수와 객체에
액세스 할 수 있습니다. 자바에서 스레드는 스레드 클래스를 확장하거나
실행가능한 인터페이스를 구현하여 생성된다.
성능향상: 여러 스레드를 활용하여 여러 작업을 병렬로 실행할 수 있도록
하여 애플리케이션의 성능을 향상시킬수 있습니다. 이것은 더 빠른 완료 시간과
향상된 반응성으로 이어질 수 있다.
더 나은 리소스 활용: 스레드를 사용하면 여러 CPU 코어를 활용하여
시스템 리소스를 더 잘 활용할 수 있습니다. 이것은 시스템 자원을 보다
효율적으로 사용하고 전반적인 성능을 향상시킬 수 있다.
반응성: 스레드를 활용하면, 장기간 실행되는 작업을 수행하는 동안에도
어플리케이션이 반응하도록 할 수 있다
스레드 클래스의 확장: 스레드 클래스를 확장하여 스레드를 만들려면
스레드 클래스를 확장하고 run() 메서드를 재정의 (오버라이드)해야한다.
run() 메서드에는 스레드에 의해 실행이 될 코드가 포함되어 있다.
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정보를 통해 만들어지며 동일하지 않으면 접속이 되지않는다.