Java——线程的四种不同形式
生活随笔
收集整理的這篇文章主要介紹了
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) 被清除。
四,禮讓線程
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java——获取当前线程的对象(curr
- 下一篇: Java——多线程(死锁)