3.4原理之线程运行

3、Java线程
3、Java线程

3.5 常见方法

3、Java线程

3.6 start vs run方法

run方法并不能达到提升性能或异步处理的效果,因此启动一个线程一定要用start
3、Java线程
3、Java线程
3、Java线程

3.7 sleep与yield

3、Java线程
3、Java线程

sleep打断

3、Java线程

3、Java线程

线程优先级

3、Java线程

sleep防止cpu空转

3、Java线程

3.8 join方法详解

3、Java线程
3、Java线程
等待两个线程
3、Java线程
t1.join与t2.join是一样的
3、Java线程
有时效的join
(等够时间就不再等待,继续向下执行;若等待线程提前结束,也不继续等待)
3、Java线程

3.9 interrupt详解

3、Java线程
3、Java线程
3、Java线程
3、Java线程
3、Java线程
3、Java线程
isInterrupted() 不会清除打断标记
interrupted() 会清楚打断标记

3、Java线程
3、Java线程

3.10 不推荐的方法

3、Java线程

3.11 主线程与守护线程

3、Java线程
3、Java线程
3、Java线程
3、Java线程
3、Java线程

package cn.itcast.n3;

import lombok.extern.slf4j.Slf4j;

import java.io.IOException;

@Slf4j(topic = "c.TestState")
public class TestState {
    public static void main(String[] args) throws IOException {
        Thread t1 = new Thread("t1") {
            @Override
            public void run() {
                log.debug("running...");
            }
        };

        Thread t2 = new Thread("t2") {
            @Override
            public void run() {
                while(true) { // runnable

                }
            }
        };
        t2.start();

        Thread t3 = new Thread("t3") {
            @Override
            public void run() {
                log.debug("running...");
            }
        };
        t3.start();

        Thread t4 = new Thread("t4") {
            @Override
            public void run() {
                synchronized (TestState.class) {
                    try {
                        Thread.sleep(1000000); // timed_waiting
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        t4.start();

        Thread t5 = new Thread("t5") {
            @Override
            public void run() {
                try {
                    t2.join(); // waiting
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        t5.start();

        Thread t6 = new Thread("t6") {
            @Override
            public void run() {
                synchronized (TestState.class) { // blocked
                    try {
                        Thread.sleep(1000000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        t6.start();

        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        log.debug("t1 state {}", t1.getState());
        log.debug("t2 state {}", t2.getState());
        log.debug("t3 state {}", t3.getState());
        log.debug("t4 state {}", t4.getState());
        log.debug("t5 state {}", t5.getState());
        log.debug("t6 state {}", t6.getState());
        System.in.read();
    }
}

泡茶应用
3、Java线程
3、Java线程
3、Java线程
3、Java线程

相关文章: