프로세스

현재 실행중인 응용프로그램의 실행단위 (작업관리자-프로세스) 

foreground process: 눈에 보이는 프로그램

background process: 프로그램이 원활히 잘 실행될 수 있도록 지원해주는 프로그램

ex) 줌, 이클립스, 메모장 ,,, 

 

스레드

응용프로그램 내부에서 실행되는 최소 실행 단위

 

멀티스레드

여러개의 쓰레드가 모여 동시에 실행되는 것처럼 보임

 

 

사용목적

게임프로그램, 실시간으로 문자전송(=채팅),실시간으로 데이터를 보여주는 프로그램

 

=> 즉 하나의 프로그램이 실행되면 하나의 프로세스가 할당되어 작업단위를 맡고 

그 하나의 프로세스는 여러개의 쓰레드가 작업단위를 맡는다. 

크롬(하나의 프로세스가 맡는 중)안에 이미지 불러오기 등 여러가지  기능 각각의 작업을 맡는 것이 쓰레드

 

 

쓰레드를 자바에서 만들어서 사용하는 방법

(=사용자 정의 쓰레드)

1. Thread 역할을 해주는 쓰레드 클래스 존재(상속) (권장)

1) Thread 클래스를 상속받음-> run()메소드 오버라이딩

2) run()작성 -> 쓰레드의 기능을 부여

3) Thread 객체를 생성 -> start()호출 => 작동

package j210122;
//import java.lang.Thread; //자동으로 기본패키지에 있는 클래스
//1.Thread를 만드는 방법(Thread를 상속), 이름을 부여, 실행하는 방법
public class MultiThread extends Thread {
	
	public MultiThread(String s) {
		super(s); //
	}
	
	//실시간으로 어떤 기능을 구현할 것인지 정
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(char i='A'; i<='Z';i++) {
			try {
				Thread.sleep(500); //1000->1초
				System.out.print(i);
				System.out.println("쓰레드의 이름="+getName());
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//상속 -> run()재정의 -> Thread 객체를 생성 -> Thread 가동
		/*MultiThread mt = new MultiThread();
		mt.setName("임시");*/
		
		MultiThread mt = new MultiThread("임시");
		//생성자는 상속되지 않고, 기본생성자가 아닌 매개변수 있는 생성자는 직접 만들어줘야 한다
		mt.start();//내부적으로 자동으로 run()메소드를 호출해준다
		

	}

}

 

Runnable 인터페이스 구현

package j210122;
//2.Runnable 인터페이스 상속-> Thread클래스를 상속받지 못할 경우에 많이 사용(다중상속불가)
//Runnable 인터페이스는 쓰레드를 돌릴 최소한의 기능밖에 없다, 그래서 가능한 Thread클래스를 상속받는 것이 좋다
public class MyThread implements Runnable {
	
	//실시간으로 어떤 기능을 구현할 것인지
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(true) {
			System.out.println("is Running");
			try {
				Thread.sleep(500); //1000->1초
				System.out.println("쓰레드의 이름="+Thread.currentThread().getName());
				//Thread클래스를 상속받지 못해 getName()메소드를 호출하려면 클래스명.~ 써야함
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//1)Runnable 인터페이스를 상속받은 자식클래스의 객체 생성
		MyThread my = new MyThread();
		//2)Thread 클래스의 객체 생성 -> 3. 생성자 매개변수로 연결
		Thread t = new Thread(my,"테스트");//Runnable객체, 쓰레드이름
		//3)Thread객체의 start()호출 -> run() 
		t.start();
		
//Runnable 인터페이스를 구현한 클래스는 run()메소드를 오버라이딩 할 수 있지만 Thread클래스를
//상속받은 클래스처럼 start()와 같은 메소드는 없다. 따라서 별도의 쓰레드 객체를 생성해주고 구현한
//Runnable 인터페이스를 인자로 넘겨주어야한다. 

	}

}

 

쓰레드의 start(), run() 메소드☆☆

+ Recent posts