수호 라인은finally를 실행합니까?기본적으로 newthread는 수호 상태를 어떻게 정합니까?

2693 단어
finallythrowreturn에서 라인의 상태와interrupt 수호 라인은 종료할 때finnaly 블록의 코드를 실행하지 않습니다
스레드 탱크는 서버 메모리 유출을 초래합니다. 새 스레드는 기본적으로 스레드를 만들 때 현재 스레드가 있는 수호 상태를 사용합니다.
본고는 다음과 같이 검증합니다.
 
package fin;

/**
 * Created by joyce on 2019/12/16.
 */
public class TestDaemonFinally {

    public static void main(String []f) throws InterruptedException {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    try {
                        /**
                         *  , ?
                         */
                        Thread tt = new Thread(new Runnable() {
                            @Override
                            public void run() {

                            }
                        });
                        System.out.println("tt" + tt.isDaemon());
                        Thread.sleep(2000);
                        System.out.println(" 1 try ?");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } finally {
                    System.out.println(" 1 finally ?");
                }
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    try {
                        System.out.println(" 2 try ?");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } finally {
                    System.out.println(" 2 finally ?");
                }
            }
        });

        //  new thread 
        //
        System.out.println(thread.isDaemon());
        thread.setDaemon(true);
        thread.start();

        System.out.println(thread2.isDaemon());
        thread2.setDaemon(true);
        thread2.start();

        Thread.sleep(1000);
        System.out.println("exit");
    }
}

 
falsefalse 수호 루트 2의try가 실행됩니까?라인 2를 지키는finally가 실행됩니까?tttrueexit
 
결론:
1 newthread 방식, 수호 상태 계승 모선 증명
2 수호 루틴은 때때로finally를 실행할 수 있다. 때로는finally를 실행할 수 없다. 수호 루틴이 반드시 finally를 실행하지 않는 것이 아니다. 문제는finally가 아니라 수호 루틴이
수호 루틴은 사용자 루틴이 종료될 때 무작위로 종료됩니다.finally를 포함하지만 이에 국한되지 않는 문장은 실행되지 않을 수 있습니다

좋은 웹페이지 즐겨찾기