ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ThreadTest-22.03.29
    고급자바 2022. 3. 29. 17:37
    728x90

    ->실행되고 있을 때

    ->실행이 완료되웠다는 의미


    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
Designed by Tistory.