-
ThreadTest-22.03.29고급자바 2022. 3. 29. 17:37728x90

->실행되고 있을 때

->실행이 완료되웠다는 의미
ex)메인스레드1개는 존재하고 우리가 3개 만들었음 그래서 총 4개가 돌아가는 멀티스레드 이다.
=>동시작업이 가능하다.-void Run( )에 실행시키고 싶은 것들을 모두 넣어주면 된다.
-Run( )은 기존 스레드 메서드 이지만 오버라이드 하여 새로 기술해줄 수 있다.
-start( )(인스턴스 메서드)를 호출해야 스레드객체가 만들어지고 Run이 실행된다. 메인스레드 따로, / start가 실행되는 별도의 스레드 따로가 실행된다.
단일 스레드 프로그램 방식 (그냥 메인에서 시작)
public class T01_ThreadTest { public static void main(String[] args) { for(int i=1; i<=200; i++) { System.out.print("*"); } System.out.println(); for(int i=1; i<=200; i++) { System.out.print("$"); } } }멀티 스레드 프로그램 방식
-Runnable인터페이스 implements한 클래스를 만들어주었다,
-Runnable은 void run( )을 가지고 있다!!!
-첫번째 방법은 thread상속받은 클래스를 만들었다. 상속은 한번밖에 안됨 그래서 그상황을 해결하기 위해
Runnable인터페이스를 따로 만들었다.
-세번째 방법은 한번만 쓸 때 주로 사용된다.
public class T02_ThreadTest { public static void main(String[] args) { //방법1 : Thread클래스를 상속한 Class의 인스턴스를 생성한 후 이 인스턴스의 start()메서드를 호출한다. MyThread1 th1=new MyThread1(); th1.start(); //방법2 : Runnable인터페이스를 구현한 class의 인스턴스를 생성한 후 //이 인스턴스를 Thread객체의 인스턴스를 생성할때 생성자의 매개변수로 넘겨준다. 이때 생성된 Thread객체의 인스턴스의 start()메서드를 호출한다. 언제 사용? 재사용할때 Runnable r= new MyThread2(); Thread th2=new Thread(r); th2.start(); //방법3: 익명 클레스를 이용하는 방법 // Runnable 인터페이스를구현한 익명클래스를 Thread인스턴스를 생성할때 매개변수로 넘겨준다. 언제 사용? 재사용하지않을때 Thread th3=new Thread(new Runnable() { @Override public void run() { for(int i=1; i<=200; i++) { System.out.print("@"); try { /*Thread.sleep(시간)=> 주어진 시간동안 작업을 잠시 멈춘다. 시간은 밀리세컨드 단위를 사용한다. 즉, 1000은 1초를 의미한다. */ Thread.sleep(100); //0.1초 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }); th3.start(); } }class MyThread1 extends Thread{ @Override public void run() { for(int i=1; i<=200; i++) { System.out.print("*"); try { /*Thread.sleep(시간)=> 주어진 시간동안 작업을 잠시 멈춘다. 시간은 밀리세컨드 단위를 사용한다. 즉, 1000은 1초를 의미한다. */ Thread.sleep(100); //0.1초 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } super.run(); } }class MyThread2 implements Runnable{ @Override public void run() { for(int i=1; i<=200; i++) { System.out.print("$"); try { /*Thread.sleep(시간)=> 주어진 시간동안 작업을 잠시 멈춘다. 시간은 밀리세컨드 단위를 사용한다. 즉, 1000은 1초를 의미한다. */ Thread.sleep(100); //0.1초 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
세가지 모두
th1.run();
th2.run();
th3.run(); 로 바꾸면 =>스레드1개가 실행된다.


th1.run() 끝나면 main으로 가고 th1.run()지워지고 th2.run() 시작되어 끝나면 main으로 가고 이렇게 반복되어 마지막엔 실행이 종료된다.
728x90'고급자바' 카테고리의 다른 글
단일, 멀티 Thread-22.03.30 (0) 2022.03.30 Thread 처리 시간-22.03.30 (0) 2022.03.30 Annotation,Reflection-22.03.29 (0) 2022.03.29 가변형 인수,enum-22.03.29 (0) 2022.03.29 WildCard2-22.03.29 (0) 2022.03.29