Backend/JAVA

[JAVA] thread

howdyoon 2023. 3. 26. 22:18

1. Thread 클래스를 상속
class MyThread extends Thread {
	public void run() {/* 작업내용 */} //Thread클래스의 run()을 오버라이딩
}

2. Runnable 인터페이스를 구현
class MyThread implements Runnable {
	public void run() {/* 작업내용 */} //Runnable인터페이스의 run()을 구현
}

 

package oop0322;

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() {
        for(int a=0; a<num; a++){
            System.out.println(name+":"+a);
        }//for end
    }//run() end
}//class end


public class Test05_thread {

	public static void main(String[] args) {
		//Thread 클래스
        //->하나의 프로그램이나 하나의 메소드가 CPU자원을 전부 점유하는 것을 막을 수 있다
		
		//1)쓰레드를 사용하지 않는 경우
		MyThread1 t1=new MyThread1(1000, "★");
		MyThread1 t2=new MyThread1(1000, "★★");
		MyThread1 t3=new MyThread1(1000, "★★★");
		
		t1.start();
		t2.start();
		t3.start();
		
	}//main() end
}//class end

 

package oop0322;


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


public class Test06_thread {

	public static void main(String[] args) {
		//2)쓰레드를 사용한 경우
		//->JVM이 쓰레드 관리자에 등록하고, start()메소드가 run()를 호출한다
        //->예) 채팅, 실시간 예매등에 많이 사용
		
        MyThread2 t1=new MyThread2(1000, "★");
        MyThread2 t2=new MyThread2(1000, "★★");
        MyThread2 t3=new MyThread2(1000, "★★★");
        
        t1.start();
        t2.start();
        t3.start();        
		
		
	}//main() end
}//class end

 

package oop0322;


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


public class Test07_thread {

	public static void main(String[] args) {
		//3) Runnable인터페이스를 이용해서 쓰레드를 구현한 경우
		/*
			Interface Runnable{}
            class Thread implements Runnable{}
		*/
		
		
		Thread t1=new Thread(new MyThread3(1000, "★"));
		Thread t2=new Thread(new MyThread3(1000, "★★"));
		Thread t3=new Thread(new MyThread3(1000, "★★★"));
		
        t1.start();
        t2.start();
        t3.start();
	
	}//main() end
}//class end