簡體   English   中英

如何停止Runnable線程或“接口”

[英]How do i stop a Runnable thread or “interface”

我需要以某種方式停止此代碼是否有任何方法可以做到這一點。 如果有人可以回答問題並發布鏈接到你可以學習線程的地方,我就不和線程保持一致了,但是在開始的時候我沒有讀過很多關於java的書籍基礎知識有點輕松,除了文件更改之類的東西BufferedWriters和東西。 所以任何可以微調基礎知識或從那里去的地方。 對不起,我在一個問題上有疑問。 :)

private final Runnable updateCircle = new Runnable() {
        @Override 
        public void run() {
            lastColor = random.nextInt(2) == 1 ? redColor : greenColor;
            paint.setColor(lastColor);
            invalidate();
            handler.postDelayed(this, 1000);
        }
    };

Java中的線程當前輪詢一個標志以查看該線程是否已被中斷 在線程上調用interrupt()后, Thread.interrupted()函數將返回true 因此,只要Thread.interrupted()返回false就可以運行:

while (!Thread.interrupted()){
    ...
}

只有一種方法可以正確地停止線程:從這個線程的代碼中,通過離開run()方法。 最流行的方法來實現這一目標:

  1. 易失性標志 - 當您的線程執行CPU工作時非常有用

     volatile boolean stop = false void run() { doComputation(); if (stop) return; doAnotherComputation(); if (stop) return; doMoreComputation(); } 
  2. 中斷 - 當你的線程主要睡在鎖上

     void run() { synchronized(lock) { lock.wait(); //wait() will throw InterruptedException here } } //from another thread myThread.interrupt();` 

因此,如果您調用的庫代碼需要很長時間而且不會對interrupt()做出反應,則無法正確中止此代碼以停止正在運行的線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM