Java——線程的四種不同形式

一,休眠線程

public static void sleep(long millis) throws InterruptedException

在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行),此操作受到系統計時器和調度程序精度和準確性的影響。該線程不丟失任何監視器的所屬權。

參數:millis - 以毫秒為單位的休眠時間。

拋出:InterruptedException - 如果任何線程中斷了當前線程。當拋出該異常時,當前線程的中斷狀態 被清除。

package com.yy.threadmethod;public class Demo3_Sleep {
/*** *當父親壞了,那么,兒子不能比父親更壞*當父親沒壞,兒子如果有壞的東西,必須自己去處理* * public static void sleep(long millis)*                  throws InterruptedException在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行),此操作受到系統計時器和調度程序精度和準確性的影響。該線程不丟失任何監視器的所屬權。 ** 參數:millis - 以毫秒為單位的休眠時間。 * 拋出:InterruptedException - 如果任何線程中斷了當前線程。當拋出該異常時,當前線程的中斷狀態 被清除。* * */public static void main(String[] args) throws InterruptedException {demo1();                                //創建一條線程,對其進行睡眠,使其每秒打印一次demo2();                                //創建兩條線程,分別進行睡眠,讓兩條線程交替輸出}private static void demo2() {new Thread(){                               //父類Thread類里面的run方法是沒有throw拋異常的,子類在重寫父類的方法的時候,就不能去拋異常,這里只能抓異常surroundpublic void run(){for (int i = 0; i < 10; i++) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(getName() + "......aaaaaa");}}}.start();//開啟一條線程new Thread(){public void run(){for (int i = 0; i < 10; i++) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(getName() + "......bbbb");}}}.start();//開啟另一條線程
}private static void demo1() throws InterruptedException {for (int i = 20; i >= 0; i--) {System.out.println("倒計時:" + i + "秒");Thread.sleep(100);}}}

二,守護線程

守護線程:設置一個線程為守護線程,該線程不會單獨執行,當其他的非守護線程都結束后,自動退出,退出的時候會有一定的緩沖時間,不會立馬就結束;

public final void setDaemon(boolean on)

將該線程標記為守護線程或用戶線程。當正在運行的線程都是守護線程時,Java 虛擬機退出。 該方法必須在啟動線程前調用。

參數:on - 如果為 true,則將該線程標記為守護線程。

被標記成守護線程的線程,相當于象棋里的車馬象士,而沒被標記為守護線程的線程,相當與將帥。
package com.yy.threadmethod;public class Demo4_Daemon {
/*** 守護線程* 設置一個線程為守護線程,該線程不會單獨執行,當其他的非守護線程都結束后,自動退出,退出的時候會有一定的緩沖時間,不會立馬就結束* * */public static void main(String[] args) {Thread t1 = new Thread(){               //匿名內部類public void run(){                  //重寫run()方法for (int i = 0; i < 2; i++) {System.out.println(getName() + "...wsq" );} }};Thread t2 = new Thread(){public void run(){for (int i = 0; i < 50; i++) {System.out.println(getName() + "...yy" );} }};t2.setDaemon(true);                     //當傳入true就是意味著設置為守護線程,把t2設置成守護線程,相當于象棋中的車馬象士,去守護t1,ti就相當于是將帥’t1.start();t2.start();}}

三,加入線程

join():當前線程暫停,等待指定的線程執行結束之后,當前線程再繼續

join(int):join()的一個重載方法,可以等待指定的毫秒之后繼續

  • public final void join()
    throws InterruptedException等待該線程終止。
  • 拋出:
    InterruptedException - 如果任何線程中斷了當前線程。當拋出該異常時,當前線程的中斷狀態 被清除。

  • public final void join(long millis,int nanos)
    throws InterruptedException等待該線程終止的時間最長為 millis 毫秒 + nanos 納秒。

  • 參數:
    millis - 以毫秒為單位的等待時間。
    nanos - 要等待的 0-999999 附加納秒。
  • 拋出:
    IllegalArgumentException - 如果 millis 值為負,則 nanos 的值不在 0-999999 范圍內。
    InterruptedException - 如果任何線程中斷了當前線程。當拋出該異常時,當前線程的中斷狀態 被清除。
package com.yy.threadmethod;public class Demo5_Join {public static void main(String[] args) {final Thread t1 = new Thread(){             //匿名內部類(局部內部類)在使用它所在方法中的局部變量的時候,必須用final修飾public void run(){for (int i = 0; i < 10; i++) {System.out.println(getName() + "..." + "海闊天空");}}};Thread t2 = new Thread(){public void run(){for (int i = 0; i < 10; i++) {if(i == 2){                     //當i=2時,也就是t2執行兩次之后,t1線程開始插隊try {
//                          t1.join();              //這表示t1線程開始插隊,然后,直到t1線程運行完畢后,才輪到t2線程運行t1.join(1);             //這表示t1線程插隊,插隊1毫秒之后,兩條線程繼續交替進行,也就是繼續多線程進行} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(getName() + "..." + "光輝歲月");}}};t1.start();t2.start();}}

四,禮讓線程

yield:禮讓線程,讓出CPU

public static void yield() 暫停當前正在執行的線程對象,并執行其他線程。

package com.yy.threadmethod;public class Demo6_Yield {public static void main(String[] args) {new MyThread().start();                     //定義一條線程        new MyThread().start();                     //定義另一條線程}
}class MyThread extends Thread{public void run(){for (int i = 1; i <= 1000; i++) {       if(i % 10 == 0){                        //若i是10的倍數Thread.yield();                     //讓出CPU,讓另一條線程進行}System.out.println(getName() + "..." + i);}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379948.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379948.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379948.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hdu1053 Entropy hdu2527 Safe Or Unsafe

裸裸的哈弗曼編碼&#xff0c;求出哈弗曼編碼的路徑長度&#xff0c;注意整個字符串為一種字符的情況 View Code #include<iostream>#include<queue>#include<algorithm>#include<vector>using namespace std;struct node{int u,w; node(int a0,in…

Java ListResourceBundle getContents()方法與示例

ListResourceBundle類的getContents()方法 (ListResourceBundle Class getContents() method) getContents() method is available in java.util package. getContents()方法在java.util包中可用。 getContents() method is used to get the contents into the form of an Obje…

DOM元素的所有子元素 .elements

.elements屬性用來獲取某個DOM元素的所有子元素&#xff0c;是個很有用的屬性&#xff0c;可用于用className來獲取指定元素等用途。 轉載于:https://www.cnblogs.com/cly84920/archive/2008/08/06/4427136.html

sys.stdin.read和raw_input函數

sys.stdin.read函數 例子&#xff1a; import sysreadsys.stdin.read() for i in range(len(read)):print i,read[i],-1運行&#xff0c;當執行到readsys.stdin.read()會阻塞&#xff0c;等待我們輸入 我們輸入&#xff1a; h e當輸入&#xff0c;ctrlD結束輸入&#xff0c…

Java ObjectOutputStream writeFields()方法與示例

ObjectOutputStream類writeFields()方法 (ObjectOutputStream Class writeFields() method) writeFields() method is available in java.io package. 在java.io包中提供了writeFields()方法 。 writeFields() method is used to write the buffered fields to the ObjectOutpu…

利用帶關聯子查詢Update語句更新數據

Update是T-sql中再簡單不過的語句了&#xff0c;update table set columnexpression [where condition]&#xff0c;我們都會用到。但update的用法不僅于此&#xff0c;真正在開發的時候&#xff0c;靈活恰當地使用update可以達到事半功倍的效果。 假定有表Table1&#xff08;…

SQL Server 2000數據庫移植到SQL Server 2008R2數據庫服務器中碰到的”3145錯誤”及解決辦法...

辛苦忙碌了一個星期終于安裝配置好了TFS服務器&#xff0c;給每個團隊成員分配了賬戶和郵箱。不過&#xff0c;老機器中的部分數據需要備份到新機器中&#xff0c;其中在移植一個使用DVBBS架設的論壇的時候&#xff0c;出了點問題&#xff0c;記錄如下&#xff0c;以備查找&…

web安全----XSS漏洞之基本原理

0x01 概述 XSS為跨站腳本攻擊&#xff0c;XSS攻擊針對的是用戶層面的攻擊&#xff01;類型有反射型XSS、存儲型XSS、DOM型XSS&#xff0c;這里的DOM可以理解為頁面&#xff0c;或者是所有的標簽、內容之和 0x02 反射型XSS 反射型XSS攻擊流程為&#xff1a; 即&#xff1a; …

面向對象(匿名內部類與有名字內部類的比較)

A:匿名內部類 就是內部類的簡化寫法B:前提 這里的類可以是具體類也可以是抽象類C&#xff1a;格式 new 類名或者接口(){ //表示繼承這個類或實現這個接口重寫方法}D&#xff1a;本質是什么呢&#xff1f; 是一個繼承了該類或者實現了該接口的子類匿名對象E&#xff1a;案…

如何在Python中針對一個值檢查多個變量?

Given multiple variables and they are assigned some values, we have to test a value with these variables. 給定多個變量并為其分配了一些值&#xff0c;我們必須使用這些變量測試一個值。 Let, there are three variables a, b and c and we have to check whether one…

品析《桃花庵歌》

桃花庵歌 【明】唐寅&#xff08;YIN) 桃花塢里桃花庵&#xff0c;桃花庵下桃花仙&#xff1b; 桃花仙人種桃樹&#xff0c;又摘桃花賣酒錢。 酒醒只在花前坐&#xff0c;酒醉還來花下眠&#xff1b; 半醒半醉日復日&#xff0c;花落花開年復年。 但愿老死花酒間&#xf…

面向對象(匿名內部類重寫多個方法調用)

①匿名內部類只針對重寫一個方法的時候使用; ②若有多個方法&#xff0c;通過匿名內部類進行調用的時候&#xff0c;需要一個一個進行調用,比較麻煩&#xff0c;所以不建議使用。 ③匿名內部類是無法向下轉型的&#xff0c;向下轉型需要子類的類名&#xff0c;這里面沒有子類…

c++ 取兩個鏈表的交集_使用C ++程序查找兩個鏈表的交集

c 取兩個鏈表的交集Problem statement: Write a C program to find the intersection of two single linked lists. 問題陳述&#xff1a;編寫一個C 程序來查找兩個單個鏈表的交集。 Example: 例&#xff1a; Let the first linked list be:6->5->2->9->NULLLet …

只在IE中顯示

只在IE中顯示div{display:none;display:block;_display:block}轉載于:https://www.cnblogs.com/lishenglyx/archive/2008/08/21/1273089.html

web安全---XSS漏洞之標簽使用2

所有標簽已經測試完并可以使用&#xff0c;測試環境&#xff1a;DVWA的反射型XSS&#xff0c;等級low 0x01 <script>標簽 <script>alert(2)</script> <script>alert(2)</script//0x02 <img>標簽 <img src"x" onerroralert(1)…

Java——多線程(鐵路售票系統案例)

問題&#xff1a;鐵路售票&#xff0c;一共100張&#xff0c;通過四個窗口賣完。 要求&#xff1a;分別用 繼承Thread類 和 實現Runnable接口 去實現 ①用繼承Thread類去實現 package com.yy.syn;public class Demo3_Ticket { /*** 鐵路售票&#xff0c;一共100張&#xff…

Java LocalDateTime類| 帶示例的getDayOfWeek()方法

LocalDateTime類getDayOfWeek()方法 (LocalDateTime Class getDayOfWeek() method) getDayOfWeek() method is available in java.time package. getDayOfWeek()方法在java.time包中可用。 getDayOfWeek() method is used to get the field value day-of-week that is an enum …

軟件測試方法大匯總

軟件測試方法大匯總 軟件測試方法種類繁多&#xff0c;記憶起來混亂&#xff0c; 如果把軟件測試方法進行分類, 就會清晰很多。 我參考一些書籍和網上的資料&#xff0c; 把常用的軟件測試方法列出來&#xff0c; 讓大家對軟件測試行業有個總體的看法。 從測試設計方法分類 測試…

web安全----xss工具使用3

XSSer 0x01 安裝 環境&#xff1a;kali、python3&#xff08;必須是python3&#xff0c;kali默認為python2&#xff09; 安裝步驟&#xff1a; git clone https://github.com/epsylon/xsser.git cd xsser sudo python3 setup.py install 使用命令&#xff1a; xsser -h查看…

Java——多線程(死鎖)

死鎖是指&#xff1a;兩個或兩個以上的進程在執行過程中&#xff0c;由于競爭資源或者由于彼此通信而造成的一種阻塞的現象&#xff0c;若無外力作用&#xff0c;它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖&#xff0c;這些永遠在互相等待的進程稱為死鎖進…