2020년 9월 27일 일요일

자바 쓰레드 인터럽트(Thread Interrupt),스레드 종료하기 이론실습 (자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상/JAVA교육/자바교육/자바학원)

 자바 쓰레드 인터럽트(Thread Interrupt),스레드 종료하기 이론실습 (자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상/JAVA교육/자바교육/자바학원)  


ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=768


자바 쓰레드 인터럽트(Thread Interrupt),스레드 종료하기 이론실습 (자바/JAVA/자바강좌/자바동영상/��

자바 쓰레드 인터럽트(Thread Interrupt),스레드 종료하기 이론실습 (자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상/JAVA교육/자바교육/자바학원)1. Interrupt인터럽트는 스레드가 수행중인 �

ojc.asia


https://youtu.be/FCZltdLx1DY



1. Interrupt


인터럽트는 스레드가 수행중인 작업을 중지하고 다른 작업을 수행해야 한다는 뜻입니다.

스레드를 즉시 종료시키기 위해서 stop() 메소드가 있었지만 deprecated 되었습니다. 그 이유는 스레드를 갑자기 종료하면, 스레드가 사용중인 자원들이 해제되지 않은 불안전한 상태로 남겨지기 때문입니다.

Thread의 interrupt() 메소드가 호출되면 스레드에 인터럽트가 예약 되는데 “스레드를 중단” 시키겠다는 뜻으로 아무 때나 중단되지 않으므로 일단 예약을 하는 것입니다.  interrupt()가 예약된 메소드는 계속 실행되다가 sleep()이나 wait(), join() 같은 메소드들을 만나면 즉시 InterruptedException을 발생 시키고 이를 통해 run() 메소드를 정상 종료시킬 수 있습니다. 


interrupt() : 호출 받은 쓰레드가 Non-Runnable 상태에 있지 않으면 InterruptedException 예외가 예약

Non-Runnable 상태(sleep(), wait(), join()등 WAIT, TIMED_WAIT상태)에 있거나 InterruptedException을 선언한 메소드를 호출하였으면 InterruptedException이 발생합니다.

호출 받은 쓰레드가 입출력 함수를 호출(BLOCKED 상태)하여 Non-Runnable 상태에 있으면 InterruptedException이 발생합니다.

Boolean isInterrupted() : 인터럽트가 예약되어 있는지 확인

boolean Thread.interrupted() : isInterrupted() 처럼 인터럽트가 예약 되어 있는지 알아보는 메소드이며 이 메소드가 호출되면 예약되어 있는 인터럽트가 취소 된다.



2. 쓰레드 라이프 사이클



 


3. 실습

class InterruptTest extends Thread {

    public void run() {

        for( int i = 0; i < 3; i++ )

            System.out.println( i+1 + ". before sleep..." );


        try {

            sleep(1000);

        } catch( InterruptedException e ) {

            System.out.println( "InterruptedException 발생" );

        }

    }

    

    public static void main(String[] args) throws InterruptedException {        

        InterruptTest t = new InterruptTest();

        t.start();

        t.interrupt();

        //t 스레드가 종료할 때 까지 main Thread가 기다림

        // join이 생략되면 "Main Thread 종료"가 제일 먼저 출력됨

        t.join();  

        System.out.println("Main Thread 종료...");

    }

}


[실행결과]

1. before sleep...

2. before sleep...

3. before sleep...

InterruptedException 발생

Main Thread 종료...




#자바스레드#자바쓰레드#자바Thread#자바쓰레드인터럽트, #스레드#Thread.interrupt, #자바#JAVA#자바동영상#자바강의#자바교육#자바강좌#자바동영상강의#추천자바강의#추천자바강좌#JAVA동영상#JAVA강의#JAVA강좌#JAVA교육#JAVA#추천JAVA강의#추천JAVA교육#추천JAVA강좌#자바소스#자바온라인교육#자바온라인강의 

자바 쓰레드 동기화,스레드 조인(Thread.join) 이론및 실습 (자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상/JAVA교육/자바교육/자바학원)

 자바 쓰레드 동기화,스레드 조인(Thread.join) 이론및 실습 (자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상/JAVA교육/자바교육/자바학원) 



https://youtu.be/m2uRYiIqesE


ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=767


자바 쓰레드 동기화,스레드 조인(Thread.join) 이론및 실습 (자바/JAVA/자바강좌/자바동영상/자바강의

자바 쓰레드 동기화,스레드 조인(Thread.join) 이론및 실습 (자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상/JAVA교육/자바교육/자바학원)Thread.join 메소드인자로 다른 스레드 객체가 들어�

ojc.asia



Thread.join 메소드


인자로 다른 스레드 객체가 들어가는데 그 스레드에 달라붙어서 종료될 때까지 기다리 겠다는 메소드 이다. 결국 join() 메소드를 호출 하는것은 다른 스레드의 종료후에 어떤일을 하겠다는 의미 이다.

join(long millis, int nanos)

t 스레드가 현재 실행중인 Thread 객체 인 경우

t.join()  현재 스레드가 t스레드가 종료 될 때까지 실행을 일시 중지

다른 쓰레드가 만든 최종 결과물을 얻고자 할 때

네트워크로부터 데이타를 모으거나

계산 결과를 모을 때

public final void join() throws InterruptedException


package javatest;


/**

 * 1부터 100까지의 합을 5개의 스레드에 구하도록 하고 

 * main Thread는 각가 스레드릐 합을 구한 후 결과를 출력

 * @author jclee

 */

public class ThreadJoinTest {

static int sum = 0;

public static void main(String[] args) throws Exception{

Thread t1 = new Thread( () -> Sum( 1, 20) );

t1.start(); t1.join();

Thread t2 = new Thread( () -> Sum( 21, 40) );

t2.start(); t1.join();

Thread t3 = new Thread( () -> Sum( 41, 60) );

t3.start(); t1.join();

Thread t4 = new Thread( () -> Sum( 61, 80) );

t4.start(); t1.join();

Thread t5 = new Thread( () -> Sum( 81, 100) );

t5.start(); t1.join();


System.out.println("1부터 100까지의 합은 = " + sum);

}


public static void Sum(int start, int end) {

for (int i=start; i<=end; i++) {

sum += i;

}

}

}


[실행결과]

1부터 100까지의 합은 = 5050



#자바스레드, #자바쓰레드, #자바Thread,#자바쓰레드join, #스레드, #Thread.join, #자바, #JAVA, #자바동영상, #자바강의, #자바교육, #자바강좌, #자바동영상강의, #추천자바강의, #추천자바강좌, #JAVA동영상, #JAVA강의, #JAVA강좌, #JAVA교육, #JAVA, #추천JAVA강의, #추천JAVA교육, #추천JAVA강좌, #자바소스, #자바온라인교육, #자바온라인강의 

2020년 9월 26일 토요일

(자바학원/자바교육/JAVA교육)자바 스레드(Thread)yield, 제어권 양보하기(자바학원/자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상)

 


(자바학원/자바교육/JAVA교육)자바 스레드(Thread) yield, 제어권 양보하기(자바학원/자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상)    

 

Thread.yield 메소드

§yield ()는 현재 스레드가 현재 프로세서(CPU) 사용을 포기할 의향이 있으니 빨리 일정을 잡기를 원한다는 것을 스레드 스케줄러"에게 알립니다.
§
§"스레드 스케줄러"는 이 정보를 받아들이거나 무시할 수 있으며 실제로 운영 체제에 따라 다양한 동작을 합니다.
§
§받아들여 작동하는 경우 스레드 스케줄러는 yield 메소드를 호출한 스레드와 우선 순위가 같거나 높은 스레드가 있는지 확인합니다.
§

 

§프로세서가 우선 순위가 더 높거나 같은 스레드를 찾으면 현재 스레드를 실행 대기(Ready Runnable) 상태로 이동하고 프로세서를 다른 스레드에 제공하고 그렇지 않은 경우 현재 스레드가 계속 실행됩니다.

 

d5fc1b015c505a79e7ec933bedc989a1_1601132
 

 

class MyThread extends Thread {

   public MyThread(String name) {

      super(name)

   }

    public void run()

    {

    for (int i = 1; i <= 5; i++) {

            if ((i % 5) == 0) {

               System.out.println(Thread.currentThread() + "... yield");

               Thread.yield();

            }

            else {

            System.out.println(Thread.currentThread());

            }

         }

    }

}

public class YieldTest

{

    public static void main(String[]args)

    {    

    new MyThread("HelloThread...1").start();        

        new MyThread("HelloThread...2").start();

    }

 

}

 

 Thread[HelloThread...1,5,main]

Thread[HelloThread...1,5,main]

Thread[HelloThread...1,5,main]

Thread[HelloThread...1,5,main]

Thread[HelloThread...1,5,main]... Yield

 

Thread[HelloThread...2,5,main]

Thread[HelloThread...2,5,main]

Thread[HelloThread...2,5,main]

Thread[HelloThread...2,5,main]

Thread[HelloThread...2,5,main]... yield

 

#자바스레드, #자바쓰레드, #자바Thread, #자바쓰레드예제, #스레드, #yield,  #자바#JAVA#자바동영상#자바강의#자바교육#자바강좌#자바동영상강의#추천자바강의#추천자바강좌#JAVA동영상#JAVA강의#JAVA강좌#JAVA교육#JAVA#추천JAVA강의#추천JAVA교육#추천JAVA강좌#자바소스#자바온라인교육#자바온라인강의   

(자바학원/자바교육/JAVA교육)자바 스레드(Thread) 라이프사이클, NEW, RUNNABLE, WAITING, BLOCKED, TIMED_WAITING, TERMINATED(자바학원/자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상)

 (자바학원/자바교육/JAVA교육)자바 스레드(Thread) 라이프사이클, NEW, RUNNABLE, WAITING, BLOCKED, TIMED_WAITING, TERMINATED(자바학원/자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상)


https://youtu.be/za_R5xH4QsU



ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=765


(자바학원/자바교육/JAVA교육)자바 스레드(Thread) 라이프사이클, NEW, RUNNABLE, WAITING, BLOCKED, TIMED_WAITIN

(자바학원/자바교육/JAVA교육)자바 스레드(Thread) 라이프사이클, NEW, RUNNABLE, WAITING, BLOCKED, TIMED_WAITING, TERMINATED(자바학원/자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상)스레드 라이프사

ojc.asia

   



 


스레드 라이프사이클


java.lang.Thread 클래스는 스래드 상태를 정의하는 정적 State 열거 형을 포함 합니다.

NEW – 아직 실행을 시작하지 않은 새로 생성 된 스레드

RUNNABLE – 실행 중이거나 실행할 준비가 되었지만 리소스 할당을 기다리고 있습니다.

BLOCKED – 동기화 된 블록 / 메소드에 들어가거나 다시 들어가기 위해 모니터 잠금을 획득하기를 기다리고 있습니다.

WAITING – 다른 스레드가 시간 제한없이 특정 작업을 수행 할 때까지 기다립니다.

TIMED_WAITING – 다른 스레드가 지정된 기간 동안 특정 작업을 수행하기를 기다립니다.

TERMINATED – 실행 완료


스레드 라이프사이클 실습


package javatest;

public class ThreadStateTest {

public static void main(String[] args) throws InterruptedException {

        Thread t = new Thread(() -> {

                Thread self = Thread.currentThread();

                System.out.println(self.getName() + " ::: " + self.getState());  

                for(int i=0; i < 10; i++) {

                 System.out.print(".");

                 try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

                }

        }); 

        System.out.println(t.getState()); 


        t.start();        

        System.out.println(t.getState()); 


        t.join();  //main Thread가 t 쓰레드가 끝날때 까지 대기        

        System.out.println(t.getState()); 


        if (t.getState() == Thread.State.TERMINATED) {

            System.out.println(t.getName() + " ::: Terminated"); 

        }

    }

}


NEW

RUNNABLE

Thread-0 ::: RUNNABLE

..........TERMINATED

Thread-0 ::: Terminated



#자바스레드, #자바쓰레드, #자바Thread, #자바쓰레드예제, #스레드, #자바#JAVA#자바동영상#자바강의#자바교육#자바강좌#자바동영상강의#추천자바강의#추천자바강좌#JAVA동영상#JAVA강의#JAVA강좌#JAVA교육#JAVA#추천JAVA강의#추천JAVA교육#추천JAVA강좌#자바소스#자바온라인교육#자바온라인강의  

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...