TIL #20

DuBu·2023년 7월 5일
0

일본IT JAVA 연수과정

목록 보기
35/61
post-thumbnail

Program

프로그램은 컴퓨터에서 실행되는 명령어들의 집합입니다. 일반적으로 프로그램은 하나의 작업을 수행하는 단일 프로세스로 구성됩니다. 하지만 멀티 프로세싱과 멀티 스레딩을 사용하여 여러 작업을 동시에 처리할 수 있습니다.

Process

process는 컴퓨터에서 실행 중인 프로그램의 인스턴스입니다. 프로세스는 운영체제에 의해 관리되며, 자신만의 주소 공간, 실행 상태, 자원 및 제어 정보를 갖고 있습니다.
process는 다음과 같은 특징을 가지고 있습니다. 먼저, 각 프로세스는 독립적으로 실행되며, 서로의 주소 공간이나 자원에 접근할 수 없습니다. 각 프로세스는 운영체제로부터 할당받은 자원을 사용하여 독립적으로 실행됩니다.

Thread

  • process 내에서 실제 작업을 수행.
  • 모든 프로세스는 하나 이상의 쓰레드를 가지고 있다.
  • 프로그램 안에 또다른 프로그램
  • 쓰레드의 실행 시점은 알 수가 없음 -> 전적으로 OS의 스케쥴링 알고리즘에 따라 움직이므로
  • 프로그램은 기본적으로 쓰레드를 기준으로 컨텍스트 스위칭 됨
  • 싱글 프로세스는 기본적으로 main 쓰레드가 있다.

Multi Process

멀티 프로세스는 여러 개의 프로세스가 동시에 실행되는 것을 말합니다. 각 프로세스는 독립적인 메모리 공간을 가지고 있으며, 각자의 CPU 시간을 할당받아 작업을 수행합니다. 멀티 프로세싱은 여러 작업을 동시에 처리할 수 있으므로 시스템의 성능을 향상시킬 수 있습니다. 그러나 프로세스 간의 통신과 같은 추가적인 관리가 필요합니다.

Multi Thread

멀티 스레딩은 하나의 프로세스 내에서 여러 개의 스레드가 동시에 실행되는 것을 말합니다. 스레드는 프로세스 내의 동일한 메모리 공간을 공유하며, 각자의 실행 흐름을 가지고 작업을 수행합니다. 멀티 스레딩은 여러 작업을 동시에 처리할 수 있으며, 스레드 간의 통신과 데이터 공유가 비교적 간단합니다. 하지만 스레드 간의 동기화와 교착상태(deadlock) 등의 문제에 유의해야 합니다.

아래를 쓰레드로 생성하여 프로그래밍 하시오.

  • 300번 찍기
    | 300번찍기
public class ThreadMain {
	public static void main(String[] args) {
	   Thread1 th1 = new Thread1();
	   Thread2 th2 = new Thread2();
	   
	  th1.start();
	  th2.start();
    }

}

class Thread1 extends Thread{
	@Override
	public void run() {
		for(int i = 0; i<300; i++) {
			
			System.out.println("-");
		}
	}
}
class Thread2 extends Thread{
	@Override
	public void run() {
		for(int i = 0; i<300; i++) {
			
			System.out.println("|");
		}
	}	
}

자바에서 쓰레드를 생성(코딩)하는 2가지 방법은?

  1. Runnable 인터페이스 구현:
    Runnable 인터페이스를 구현하는 클래스를 작성하고, 해당 클래스의 인스턴스를 스레드로 실행하는 방법입니다. Runnable 인터페이스는 run() 메서드를 정의하고 있으며, 스레드가 실행될 때 이 메서드가 호출됩니다.
public class MyRunnable implements Runnable {
    public void run() {
        // 스레드에서 실행될 작업을 구현합니다.
    }
}

// 스레드 생성 및 실행
Thread thread = new Thread(new MyRunnable());
thread.start();
  1. Thread 클래스 상속:
    Thread 클래스를 상속받아 새로운 클래스를 작성하고, 해당 클래스의 인스턴스를 스레드로 실행하는 방법입니다. Thread 클래스는 이미 Runnable 인터페이스를 구현하고 있으며, run() 메서드를 오버라이딩하여 스레드에서 실행될 작업을 구현합니다.
public class MyThread extends Thread {
    public void run() {
        // 스레드에서 실행될 작업을 구현합니다.
    }
}

// 스레드 생성 및 실행
MyThread thread = new MyThread();
thread.start();

0개의 댓글