結束執行緒,後台執行緒多執行緒講解

2021-09-27 02:58:59 字數 2475 閱讀 4625

執行緒生命週期

任何事物都是生命週期,執行緒也是,

正常終止 當執行緒的run()執行完畢,執行緒死亡。

使用標記停止執行緒

注意:stop方法已過時,就不能再使用這個方法。

如何使用標記停止執行緒停止執行緒。

開啟多執行緒執行,執行**通常是迴圈結構,只要控制住迴圈,就可以讓run方法結束,執行緒就結束。

package api;

public class thread_last catch (interruptedexception e)

con.tag=false;

pro.tag=false;

}
}

//先些幾個類

class person1 catch (interruptedexception e)

}

this.name=name;

this.***=***;

flag=true;

notify();

}public synchronized void read() catch (interruptedexception e)

}system.out.println("name: "+this.name+" ***: "+this.***);

flag=false;

notify();

}

}

//生產者

class producer1 implements runnable

public producer1(person1 p) 

public void run() else

i++;

} }}

}

//消費者

class consumer1 implements runnable

public consumer1(person1 p)

public void run()

}後台執行緒

後台執行緒:就是隱藏起來一直在默默執行的執行緒,直到程序結束。

實現:setdaemon(boolean on)

特點:當所有的非後台執行緒結束時,程式也就終止了同時還會殺死程序中的所有後台執行緒,也就是說,只要有非後台執行緒還在執行,程式就不會終止,執行main方法的主線程就是乙個非後台執行緒。

必須在啟動執行緒之前(呼叫start方法之前)呼叫setdaemon(true)方法,才可以把該執行緒設定為後台執行緒。

一旦main()執行完畢,那麼程式就會終止,jvm也就退出了。

可以使用isdaemon() 測試該執行緒是否為後台執行緒(守護執行緒)。

該案例:開啟了乙個qq檢測公升級的後台執行緒,通過while真迴圈進行不停檢測,當計數器變為100的時候,表示檢測完畢,提示是否更新,執行緒同時結束。

為了驗證,當非後台執行緒結束時,後台執行緒是否終止,故意讓該後台執行緒睡眠一會。發現只要main執行緒執行完畢,後台執行緒也就隨之消亡了。

class qqupdate implements runnable catch (interruptedexception e)

if (i == 100)

}}}public class demo9

}thread的join方法

當a執行緒執行到了b執行緒join方法時a就會等待,等b執行緒都執行完a才會執行,join可以用來臨時加入執行緒執行

本案例,啟動了乙個jointhread執行緒,main(主線程)進行for迴圈,當計數器為50時,讓jointhread,通過join方法,加入到主線程中,發現只有jointhread執行緒執行完,主線程才會執行完畢.

可以刻意讓jointhread執行緒sleep,如果jointhread沒有呼叫join方法,那麼肯定是主線程執行完畢,但是由於jointhread執行緒加入到了main執行緒,必須等jointhread執行完畢主線程才能繼續執行。

class jointhread implements runnable catch (interruptedexception e)

system.out.println(thread.currentthread().getname() + " i:" + i);

i++;

}}public class demo10

system.err.println(thread.currentthread().getname() + " i:" + i);

i++;

}

}

}

上述程式用到了thread類中的join方法,即th.join語句,作用是將th對應的執行緒合併到嗲用th.join語句的執行緒中,main方法的執行緒中計數器到達100之前,main執行緒和one執行緒是交替執行的。在main執行緒中的計數器到達100後,只有one執行緒執行,也就是one執行緒此時被加進了mian執行緒中,one執行緒不執行完,main執行緒會一直等待

帶引數的join方法是指定合併時間,有納秒和毫秒級別。

多執行緒講解

using system using system.threading using system.windows.forms namespace threadtest private void form1 load object sender,eventargs e private void but...

Java多執行緒五 後台執行緒

下面是乙個後台執行緒的例子 public class daemons implements runnable catch interruptedexception e public static void main string args throws interruptedexception sy...

多執行緒(二) 前台執行緒和後台執行緒 聯合執行緒

前台執行緒和後台執行緒的關係 後台執行緒前台執行緒建立 public class test thread t newtestthread 必須在start 前設定為後台執行緒 不加setdaemon true 則是前台執行緒 t.setdaemon true t.start class testth...