[20220919] Test02_thread

kangsun·2022년 9월 19일
0

Java

목록 보기
16/44

📌 Thread 클래스

하나의 프로그램이나 하나의 메소드가 cpu자원을 전부 점유하는 것을 막을 수 있다.

1. 쓰레드를 사용하지 않은 경우

- MyThread1 클래스 생성

class MyThread1 {
	private int num;
	private String name;
	
	public MyThread1() {}
	
	public MyThread1(int num, String name) {
		this.num = num;
		this.name = name;
	}//end
	
	
	//함수생성
	public void start() {
		run();
	}//start() end
	
	public void run() {
		//start를 통해서 부른다.
		//기능구현은 run에서.
		for(int a=0; a<num; a++) {
			System.out.println(name+":"+a);
		}//for end
	}//run() end
	
}//class end

- 메인으로 돌아와 객체를 생성한다.

		MyThread1 t1=new MyThread1(1000, "★");
		MyThread1 t2=new MyThread1(1000, "★★");
		MyThread1 t3=new MyThread1(1000, "★★★");
		
		t1.start();	//★:0 - ★:999
					//System.out.println(name+":"+a);
		t2.start();
		t3.start();
		//t1이 다 나온 후 t2가 나오고 t2가 다 완료되어야 t3가 나온다.

💻 console
★:0
★:1
★:2
.
.
.
★:999
★★:0
★★:1
★★:2
.
.
.
★★:999
★★★:0
★★★:1
★★★:2
.
.
.
★★★:999


2. 쓰레드를 사용한 경우

  • JVM이 쓰레드 관리자에 등록하고, start()메소드가 run()를 호출한다.
    예) 채팅, 실시간 예매등에 많이 사용.

- MyThread2 클래스 생성

class MyThread2 extends Thread {
				//클래스가 클래스를 상속받는 경우, 단일 상속만 가능하다.
	
	private int num;
	private String name;
	
	public MyThread2() {}
	
	public MyThread2(int num, String name) {
		this.num = num;
		this.name = name;
	}//end

	//start()함수는 run()함수를 호출하는 기능
	
	@Override
	public void run() {	//비지니스 로직 구현
		for(int a=0; a<num; a++) {
			System.out.println(name+":"+a);
		}//for end
	}//run() end
	
	

}//class end

- 메인으로 돌아와 객체를 생성한다.

		MyThread2 t1=new MyThread2(1000, "★");
		MyThread2 t2=new MyThread2(1000, "★★");
		MyThread2 t3=new MyThread2(1000, "★★★");
		
		t1.start();
		t2.start();
        t3.start();

💻 console
★:0
★★:0
★:1
★★:1
★:2
★:3
★:4
★:5
★:6
★:7
★:8
★:9
★:10
★:11
★:12
★:13
★★:2

  • 섞여서 출력된다.

3. Runnable인터페이스를 이용해서 쓰레드를 구현한 경우

interface Runnable {}
class Thread implements Runnable {}

- MyThread3 클래스 생성

class MyThread3 implements Runnable {	//미완성, 추상메서드가 없어서 (본체가 없음)
	
	private int num;
	private String name;
	
	public MyThread3() {}
	
	public MyThread3(int num, String name) {
		this.num = num;
		this.name = name;
	}//end
	
	@Override	// 이걸 해줘야 에러가 나지 않는다. (미완성 -> 완성)
		public void run() {
			for(int a=0; a<num; a++) {
				System.out.println(name+":"+a);
			}//for end
		}//run() end
}//class end

- 메인으로 돌아와 객체를 생성한다.

		Thread t1=new Thread(new MyThread3(1000, "★"));
		Thread t2=new Thread(new MyThread3(1000, "★★"));
		Thread t3=new Thread(new MyThread3(1000, "★★★"));
		
		
		t2.start();
		t2.start();
		t3.start();
		

💻 console
★:0
★★:0
★:1
★★:1
★:2
★:3
★:4
★:5
★:6
★:7
★:8
★:9
★:10
★:11
★:12
★:13
★★:2

  • 섞여서 출력된다.
profile
코딩 공부 💻

0개의 댓글