프로그램을 실행하면 하나의 동작을 할수있지만 동작을 여러번 할 수 있도록 하는 것이 쓰레드이다. 자바에서는 Thread를 상속받거나 Runnable 인터페이스로 구현하는 방법도 존재한다. public class 클래스명 extends Thread public class 클래스명 implements Runnable
공통적으로 쓰레드를 구동하였을때 동작하는 부분은 run()메쏘드 안에 넣어서 사용한다. 그리고 쓰레드를 구동하는데는 start()메소드를 사용하고 한번 start메쏘드를 사용하면 그 쓰레드는 더이상 사용할 수 없게 된다. (Thread를 사용했을 때는 run() 메쏘드를 오버라이딩 한것이고 Runnable 인터페이스를 사용할때는 추상클래스에서 구현한 것이다.) 먼저 extends Thread를 사용한 Thread를 해보겠습니다.
package Day3;
public class SingleThreadEx extends Thread{ //Thread를 상속받는 클래스를 만든다 public int[] temp; //temp를 생성하고 Int배열을 만든다 public SingleThreadEx(String threadname){ //생성자 super(threadname); //상위 클래스인 Thread를 받아서 쓰기 위해서 (super : 상위 클래스의 생성자를 호출 할 때 사용) temp = new int[10]; //temp에 있는 int배열을 10으로 설정 for(int start = 0; start < temp.length; start++){ //0~9까지 10번 for문을 돌린다 temp[start] = start; //for문을 돌린 내용은 temp배열에 넣는다 } } public void run(){ //오버라이딩 받음. Thread 안의 메소드 생성 for(int start : temp){ //start부터 temp까지 하나씩 늘린다(for문) 출력을 위해서 try{ sleep(1000); //try~chatch문 1초마다 인터럽트를 줘서 1초마다 화면이 출력된다. }catch (InterruptedException ie){ ie.printStackTrace(); } System.out.printf("스레드 이름 : %s ,",currentThread().getName()); //현재스레드에 받을 이름을 출력해준다(첫번째) System.out.printf("temp value : %d %n", start); //start에 있는 0~9까지의 배열을 출력해준다 } } public static void main(String[] args){ SingleThreadEx st = new SingleThreadEx("첫번째"); //SingleThreadEx를 상속받아서 String이므로 첫번째를 넣는다 st.start(); //SingleThreadEx를 실행한다. } }