


package ex0306;
public class ThreadExam { //메인 넘버2개 알파1개
public static void main(String[] args) {
System.out.println("----------------------메인시작---------------------------");
NumberThread th1 = new NumberThread("첫찌쓰렏");
NumberThread th2 = new NumberThread("두찌쓰렏");
Thread th3 =new Thread(new AlphaThread(),"세찌쓰렏");
//들쭉날쭉
th1.start();
th2.start();
th3.start();
//런직접실행시 1일 다하고~2가 일다하고~
//th1.run();
//th2.run();
//th3.run();
System.out.println("----------------------메인끝---------------------------");
}
}
////////////////////////////////////////////////////////////상속과 구현
class NumberThread extends Thread{
NumberThread(String name){
super(name); //스레드 이름설정
}
@Override
public void run() {
//현재동작스레드 누구?
for(int i=1 ; i<=10 ; i++) {
System.out.println(super.getName()+" =====> "+i);
}
System.out.println("-----------------------------------------------**");
System.out.println(super.getName()+" 스레드종료..");
System.out.println("-----------------------------------------------**");
}
}
////////////////////////////////////////////////////////////상속과 구현
class AlphaThread implements Runnable{
@Override
public void run() {
Thread th = Thread.currentThread();
for(char ch='A' ; ch<='z'; ch++) {
System.out.println(th.getName()+" ==> "+ch);
}
System.out.println("-----------------------------------------------//");
System.out.println(th.getName()+" 스레드종료");
System.out.println("-----------------------------------------------//");
}
}
이 코드는 멀티스레딩을 이해하기 위한 예제입니다. 한 마디로, 여러 작업(스레드)을 동시에 실행하여 프로그램의 효율성을 높이는 개념을 보여줍니다. 아래에서 차근차근 설명해볼게요.
메인 시작과 종료 메시지 출력
System.out.println("----------------------메인시작---------------------------");
…
System.out.println("----------------------메인끝---------------------------");
스레드 객체 생성
NumberThread th1 = new NumberThread("첫찌쓰렏");
NumberThread th2 = new NumberThread("두찌쓰렏");
Thread th3 = new Thread(new AlphaThread(), "세찌쓰렏");
NumberThread는 Thread 클래스를 상속받아 만든 스레드입니다.AlphaThread는 Runnable 인터페이스를 구현하여 스레드로 실행할 수 있게 만든 클래스이며, 이를 Thread 객체로 감싸고 이름을 지정합니다.스레드 실행 (start() 메소드 사용)
th1.start();
th2.start();
th3.start();
start() 메소드를 호출하면 각각의 스레드가 새로운 실행 흐름(쓰레드)에서 run() 메소드를 실행하게 됩니다.run() 호출은 단순히 메소드 호출일 뿐 새 스레드를 생성하지 않고 메인 스레드에서 순차적으로 실행됩니다.class NumberThread extends Thread {
NumberThread(String name) {
super(name); // 스레드의 이름을 지정
}
…
}Thread 클래스를 상속받아, 생성자에서 부모의 생성자를 호출하여 스레드 이름을 설정합니다.@Override
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.println(super.getName() + " =====> " + i);
}
System.out.println("-----------------------------------------------**");
System.out.println(super.getName() + " 스레드종료..");
System.out.println("-----------------------------------------------**");
}run() 메소드 내에서 1부터 10까지 숫자를 반복하며, 스레드 이름과 함께 출력합니다.class AlphaThread implements Runnable {
@Override
public void run() {
Thread th = Thread.currentThread();
for (char ch = 'A'; ch <= 'z'; ch++) {
System.out.println(th.getName() + " ==> " + ch);
}
System.out.println("-----------------------------------------------//");
System.out.println(th.getName() + " 스레드종료");
System.out.println("-----------------------------------------------//");
}
}Runnable 인터페이스를 구현하여 run() 메소드를 정의합니다.Thread.currentThread()를 통해 참조한 후, 문자 'A'부터 'z'까지(대문자, 일부 특수문자, 소문자까지 포함) 순차적으로 출력합니다.start() 메소드 사용
start()는 새로운 스레드를 생성하고 그 스레드가 독립적으로 run() 메소드를 실행하도록 합니다.run() 메소드 직접 호출 (주석 처리된 코드)
run()을 직접 호출하면, 별도의 스레드를 생성하지 않고 현재 스레드(여기서는 메인 스레드)에서 순차적으로 실행됩니다.이와 같이 이 예제 코드는 스레드 생성, 스레드 실행, 그리고 스레드 간 동시 실행에 대한 기본적인 이해를 돕기 위한 구조로 작성되어 있습니다.