JAVA

[JAVA]Thread

로돌씨 2024. 3. 5. 17:48
프로세스란?
실행중인 프로그램 , 하나이상의 스레드로 생성

 

스레드란?
프로세스 내에서 할당된 자원을 이용해 실제 작업을 수행하는 작업 단위 ,
모든 프로세스는 하나 이상의 스레드를 가지며 각각 독립적인 작업 단위를 가짐

 

멀티프로세스 vs 멀티스레드

멀티 프로세스 : 각각의 프로세스를 독립적으로 실행

멀티 스레드 : 하나의 프로세스내에서 여러 스레드가 동시에 작업수행

 

런에이블 상속

class MyThread implements Runnable{//런에이블 상속받기

	@Override
	public void run() {
		for(int i=0 ; i<100 ; i ++) {
			System.out.println("i =" + i );
		}
		
	}
	
	
	
}
public class Thread01 {
	public static void main(String[] args) {
		System.out.println("---main start---");
		
		MyThread m1 = new MyThread();
		MyThread m2 = new MyThread();
		//m1.run();
		//m2.run(); // 이건 그냥 메인이 돌아가는것 뿐
		
		Thread t1 = new Thread(m1);
		Thread t2 = new Thread(m2);
		//쓰레드에 마이쓰레드라는 객체를 넣어준다 . 
		
		//Thread.start() ->자동으로 Run() 호출 
		t1.start();
		t2.start();
		//번갈아가면서 작동을 하는 모습
		//스레드는 메인에서 1개 ,런 실행되는 t1, t2 두개 총 세개
		//메인먼저실행 ( 스타트 스탑 출력 ) 후에 번갈아가면서 t1 t2 출력
		
		
		System.out.println("---main stop---");
	}
}

 

스레드 상속

class MyThread02 extends Thread { // 스레드 상속받기
	public MyThread02(String name) {
		super(name); // 헷갈리니깐 이름을 정해줌

	}

	@Override // Thread클래스 상속받음
	public void run() {
		for (int i = 0; i < 100; i++) {
			System.out.println(this.getName() + "=" + i);
		}
		System.out.println(this.getName() + "끝");
	}
}

public class Thread02 {

	public static void main(String[] args) {
		MyThread02 m1 = new MyThread02("야옹");
		MyThread02 m2 = new MyThread02("멍멍");

		m1.setPriority(Thread.MIN_PRIORITY);
		m2.setPriority(Thread.MAX_PRIORITY);
		// 숫자가 높을수록 우선순위를 둠

		m1.start();
		m2.start();

		// 번갈아가면서 야옹 멍멍하면서 끝남

	}

}

run() 은 main() 위로 쌓임 ,

start() 는 새로운 스레드 형성하고 그위에 run()메소드가 쌓임

스레드 스케쥴링?
스레드 갯수가 코어의 수보다 많을 경우 어떤순서로 동시성을 실행할것인가 결정
스케쥴링에 의해 스레드들은 번갈아가면서 run()메소드 조금씩 실행

 

스케쥴링 방식

  • priprity

우선순위가 높은 스레드가 작업시간을 더많이 가지도록 하는스케쥴링 방식 1~10까지 우선순위 부여가능

(기본값은 5)

  • Round-Robin

시간할당량을 정하여 하나의 스레드를 정해진 시간만큼 실행시키는 방식

public class Thread03 {

	public static void main(String[] args) {
		for(int i = 1; i<50 ; i ++) {
			try {
				Thread.sleep(1000); //슬립: 실행중인 스레드를 정지시킴 
				//밀리세컨드 단위로 . 1000 = 1초 
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
			System.out.print("ㅇ(^ㅁ^)ㅇ");
		}
	
	}

}

 

'JAVA' 카테고리의 다른 글

[JAVA]MVC패턴  (0) 2024.03.21
[JAVA]네트워크  (0) 2024.03.08
[JAVA] Collection(List , set , Map)  (1) 2024.02.27
[JAVA]입출력( I / O ) #2  (1) 2024.02.26
[JAVA]입출력( I / O )  (0) 2024.02.22