並發基礎(九) java線程的終止與中斷

來源:互聯網
上載者:User

標籤:com   test   body   stop   throws   str   本質   ide   就是   

1、簡單瞭解一下:為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?

??suspend 、resume、stop方法分別完成了線程的暫停、恢複、終止的工作。不建議使用原因:是因為這三個方法帶來的副作用,如suspend( )方法,調用後,線程就會一直佔用資源睡眠,直到調用resume( )恢複後,才可以運行。這樣很容易引發死結。同樣,stop( )方法在終結一個線程時不會保證線程的資源正常釋放,因此會導致程式可能工作在不確定的狀態下。
??線程的暫停、恢複操作可以用 等待/通知 機制來替代。但線程的終止就要使用者去實現了。
詳細可參考:http://bjzhkuang.iteye.com/blog/1748396

2、如何優雅安全地終止線程

??終止一個線程 本質上就是線程間的通訊互動的過程。因此,線程間的通訊方式:共用變數、流、中斷都可以用來實現終止線程的機制。最常用的方式便是“中斷”;
下面的例子是:除了中斷,還可利用boolean變數來控制是否需要終止線程;

public class ThreadTest{public static void main(String[] args) throws InterruptedException {    MyTask taskOne = new MyTask();    Thread threadOne = new Thread(taskOne,"threadOne");    threadOne.start();    TimeUnit.MILLISECONDS.sleep(500);    threadOne.interrupt();        MyTask taskTwo = new MyTask();    Thread threadTwo = new Thread(taskTwo,"threadTwo");    threadTwo.start();    TimeUnit.MILLISECONDS.sleep(500);    taskTwo.cancel();}private static class MyTask implements Runnable{    //要加上volatile 修飾符,保證記憶體的可見度,及時更新變數值    private volatile boolean on = true;     private long i;        @Override    public void run() {        //調用cancel、或者中斷都可以終止線程        while(on && !Thread.currentThread().isInterrupted()){            i++;        }        System.out.println("線程"+Thread.currentThread().getName()+" Count i = "+i);    }        public void cancel(){        on = false;    }   }}

運行結果:

線程threadOne Count i = 239418320
線程threadTwo Count i = 235374425

並發基礎(九) java線程的終止與中斷

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.