AtomicBoolean關閉線程任務(如果已經執行,則等待執行結束)

import java.util.concurrent.atomic.AtomicBoolean;

public class TestThread {
    private AtomicBoolean run = new AtomicBoolean(true);

    public void shutdown() {
        run.compareAndSet(true, false);
    }

    public int f(int n) {
        if (n <= 2) {
            return 1;
        }

        return f(n - 1) + f(n - 2);
    }

    public void start() {
        for (int i = 0; i < 16; i++) {
            new Thread(new Runnable() {
                public void run() {
                    while (run.get()) {
                        System.out.println("run " + Thread.currentThread().getName() + " num:" + f(40));
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
        }
    }

    public static void main(String[] args) {
        TestThread tt = new TestThread();
        tt.start();

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        tt.shutdown();
        System.out.println("shutdown");
    }
}

/*
run Thread-4 num:102334155
run Thread-14 num:102334155
run Thread-3 num:102334155
run Thread-7 num:102334155
run Thread-15 num:102334155
run Thread-12 num:102334155
run Thread-2 num:102334155
run Thread-11 num:102334155
run Thread-6 num:102334155
run Thread-10 num:102334155
run Thread-5 num:102334155
run Thread-0 num:102334155
run Thread-1 num:102334155
run Thread-13 num:102334155
run Thread-8 num:102334155
run Thread-9 num:102334155
run Thread-4 num:102334155
run Thread-14 num:102334155
run Thread-3 num:102334155
run Thread-7 num:102334155
run Thread-12 num:102334155
run Thread-11 num:102334155
run Thread-2 num:102334155
run Thread-6 num:102334155
run Thread-5 num:102334155
run Thread-15 num:102334155
run Thread-10 num:102334155
run Thread-0 num:102334155
run Thread-8 num:102334155
run Thread-1 num:102334155
run Thread-13 num:102334155
run Thread-9 num:102334155
run Thread-4 num:102334155
run Thread-14 num:102334155
shutdown
run Thread-3 num:102334155
run Thread-7 num:102334155

Process finished with exit code 0
 */

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章