日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java——线程的四种不同形式

發(fā)布時(shí)間:2023/12/1 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java——线程的四种不同形式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一,休眠線程

public static void sleep(long millis) throws InterruptedException

在指定的毫秒數(shù)內(nèi)讓當(dāng)前正在執(zhí)行的線程休眠(暫停執(zhí)行),此操作受到系統(tǒng)計(jì)時(shí)器和調(diào)度程序精度和準(zhǔn)確性的影響。該線程不丟失任何監(jiān)視器的所屬權(quán)。

參數(shù):millis - 以毫秒為單位的休眠時(shí)間。

拋出:InterruptedException - 如果任何線程中斷了當(dāng)前線程。當(dāng)拋出該異常時(shí),當(dāng)前線程的中斷狀態(tài) 被清除。

package com.yy.threadmethod;public class Demo3_Sleep { /*** *當(dāng)父親壞了,那么,兒子不能比父親更壞*當(dāng)父親沒壞,兒子如果有壞的東西,必須自己去處理* * public static void sleep(long millis)* throws InterruptedException在指定的毫秒數(shù)內(nèi)讓當(dāng)前正在執(zhí)行的線程休眠(暫停執(zhí)行),此操作受到系統(tǒng)計(jì)時(shí)器和調(diào)度程序精度和準(zhǔn)確性的影響。該線程不丟失任何監(jiān)視器的所屬權(quán)。 ** 參數(shù):millis - 以毫秒為單位的休眠時(shí)間。 * 拋出:InterruptedException - 如果任何線程中斷了當(dāng)前線程。當(dāng)拋出該異常時(shí),當(dāng)前線程的中斷狀態(tài) 被清除。* * */public static void main(String[] args) throws InterruptedException {demo1(); //創(chuàng)建一條線程,對其進(jìn)行睡眠,使其每秒打印一次demo2(); //創(chuàng)建兩條線程,分別進(jìn)行睡眠,讓兩條線程交替輸出}private static void demo2() {new Thread(){ //父類Thread類里面的run方法是沒有throw拋異常的,子類在重寫父類的方法的時(shí)候,就不能去拋異常,這里只能抓異常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("倒計(jì)時(shí):" + i + "秒");Thread.sleep(100);}}}

二,守護(hù)線程

守護(hù)線程:設(shè)置一個(gè)線程為守護(hù)線程,該線程不會(huì)單獨(dú)執(zhí)行,當(dāng)其他的非守護(hù)線程都結(jié)束后,自動(dòng)退出,退出的時(shí)候會(huì)有一定的緩沖時(shí)間,不會(huì)立馬就結(jié)束;

public final void setDaemon(boolean on)

將該線程標(biāo)記為守護(hù)線程或用戶線程。當(dāng)正在運(yùn)行的線程都是守護(hù)線程時(shí),Java 虛擬機(jī)退出。 該方法必須在啟動(dòng)線程前調(diào)用。

參數(shù):on - 如果為 true,則將該線程標(biāo)記為守護(hù)線程。

被標(biāo)記成守護(hù)線程的線程,相當(dāng)于象棋里的車馬象士,而沒被標(biāo)記為守護(hù)線程的線程,相當(dāng)與將帥。
package com.yy.threadmethod;public class Demo4_Daemon { /*** 守護(hù)線程* 設(shè)置一個(gè)線程為守護(hù)線程,該線程不會(huì)單獨(dú)執(zhí)行,當(dāng)其他的非守護(hù)線程都結(jié)束后,自動(dòng)退出,退出的時(shí)候會(huì)有一定的緩沖時(shí)間,不會(huì)立馬就結(jié)束* * */public static void main(String[] args) {Thread t1 = new Thread(){ //匿名內(nèi)部類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); //當(dāng)傳入true就是意味著設(shè)置為守護(hù)線程,把t2設(shè)置成守護(hù)線程,相當(dāng)于象棋中的車馬象士,去守護(hù)t1,ti就相當(dāng)于是將帥’t1.start();t2.start();}}

三,加入線程

join():當(dāng)前線程暫停,等待指定的線程執(zhí)行結(jié)束之后,當(dāng)前線程再繼續(xù)

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

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

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

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

四,禮讓線程

yield:禮讓線程,讓出CPU

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

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的倍數(shù)Thread.yield(); //讓出CPU,讓另一條線程進(jìn)行}System.out.println(getName() + "..." + i);}} } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Java——线程的四种不同形式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。