JAVA線程用法詳解
本文配合實例較為詳細的講解了Java的線程技術(shù),相信對于深入理解Java程序設(shè)計有一定的幫助。具體如下:
很多人在學(xué)習(xí)JAVA時都對線程都有一定的了解,而當(dāng)我們開始接觸Android開發(fā)時,才真真正正的發(fā)現(xiàn)了線程是多麼的重要,本文就把對Java線程的用法心得分享給大家,供大家參考。
首先,大家一定要分清線程和進程不是一回事,進程是什么呢?進程就如我們需要執(zhí)行class文件,而線程才是真正調(diào)用CPU資源來運行的。一個class文件一般只有一個進程,但線程可以有很多個,線程的執(zhí)行是一種異步的執(zhí)行方式。
一、如何在main函數(shù)中再開啟一個線程:
示例代碼如下:
public class Thread_one { public static void main(String [] args){ Run run = new Run(); //run.run();//此為方法的調(diào)用,和線程有著天壤之別 Thread thread = new Thread(run); thread.start();//啟動線程,調(diào)用線程的run()方法 for(int i=1; i<=20; i++){ System.out.println("主線程i的 值:--------"+i); } } } class Run implements Runnable{ @Override public void run() { for(int i=1; i<=20; i++){ System.out.println("子線程i的 值:"+i); } } }
二、線程中的sleep方法
示例代碼如下:
public class Thread_sleep { /* * 線程停頓 */ public static void main(String [] args){ Runone run = new Runone(); Thread thread = new Thread(run); thread.start(); try { Thread.sleep(5000); thread.interrupt();//中斷線程的執(zhí)行 //thread.stop();//相對中斷線程,stop過于粗暴,不建議使用,一般在需要強制關(guān)閉子線程時方使用此方法 } catch (InterruptedException e) { e.printStackTrace(); } } } class Runone implements Runnable{ @Override public void run() { for(int i=1 ; i<10; i++){ try { Thread.sleep(1000); System.out.println("-----"+new Date()+"-----"); } catch (InterruptedException e) { return ;//當(dāng)捕獲到子線程被中斷時,直接關(guān)閉子線程 } } } }
在這里特別說明一點,thread.interrupt();可以中斷線程的執(zhí)行,相對stop溫柔那么一點點,不過還不是最佳的關(guān)閉線程的方法,下面就為大家提供一種方式:
public class Thread_stop { public static void main(String [] args){ Runthree run = new Runthree(); Thread th = new Thread(run); th.start(); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } run.setStop(); } } class Runthree implements Runnable{ boolean flag; @Override public void run() { flag = true; int i = 0; while(flag){ try { System.out.println("子線程----"+(i++)); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public void setStop(){ flag = false; } }
下面就簡單給大家介紹一下線程中的合并和讓出:
一、如何合并線程,此處調(diào)用了join()方法
示例代碼如下:
public class Thread_join { /* * 合并線程 */ public static void main(String [] args){ Runtwo run = new Runtwo(); Thread thread = new Thread(run); thread.start(); try { thread.join();//合并線程,此時相當(dāng)于方法調(diào)用 } catch (InterruptedException e) { e.printStackTrace(); } for(int i=0; i<10; i++){ System.out.println("主線程:"+i); } } } class Runtwo implements Runnable{ @Override public void run() { for(int i=0; i<10; i++){ System.out.println("子線程:----"+i); } } }
二、如何讓出線程,此處調(diào)用了Thread的yield()方法,如下所示:
public class Thread_yield { /**讓出CPU * @param args */ public static void main(String[] args) { Th th = new Th("aaa"); th.start(); for(int i = 0 ; i<=10; i++){ System.out.println("主線程----"+i); } } } class Th extends Thread{ Th(){} Th(String s){super(s);} @Override public void run() { for(int i = 0; i<=10; i++){ if(i%3!=0){ System.out.println("子線程"+i); }else{ System.out.println("子線程i="+i+" 線程進行切換"); yield();//從Thread繼承方可使用此方法 } } } }
最后和大家分享一下關(guān)于線程的優(yōu)先級的問題,代碼如下所示:
public class Thread_priority { /* * priority設(shè)置線程的優(yōu)先級 * Thread默認的優(yōu)先級為5;Thread的最大優(yōu)先級為10,最小為0 */ public static void main(String [] args){ T1 t1 = new T1(); T2 t2 = new T2(); t1.start(); //t1.setPriority(Thread.NORM_PRIORITY+3);//設(shè)置t1的優(yōu)先級 t2.start(); } } class T1 extends Thread{ @Override public void run() { for(int i = 0; i<50; i++){ System.out.println("線程T1-----"+i); } } } class T2 extends Thread{ @Override public void run() { for(int i = 0; i<50; i++){ System.out.println("線程T2"+i); } } }
相信大家通過以上代碼基本已經(jīng)了解JAVA中的線程機制,希望本文所述對大家深入學(xué)習(xí)Java程序設(shè)計有所幫助。
相關(guān)文章
Java數(shù)據(jù)結(jié)構(gòu)中七種排序算法實現(xiàn)詳解
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)中七種排序算法的實現(xiàn)方法,排序算法可分為兩大類,比較類排序和非比較類排序,顧名思義可知它們是通過比較來決定元素間的相對次序,需要詳細了解排序算法的朋友可以參考下2024-02-02SpringBoot內(nèi)嵌tomcat處理有特殊字符轉(zhuǎn)義的問題
這篇文章主要介紹了SpringBoot內(nèi)嵌tomcat處理有特殊字符轉(zhuǎn)義的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06Java ByteBuffer網(wǎng)絡(luò)編程用法實例解析
這篇文章主要介紹了Java ByteBuffer網(wǎng)絡(luò)編程用法實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10SpringBoot整合RedisTemplate實現(xiàn)緩存信息監(jiān)控的步驟
這篇文章主要介紹了SpringBoot整合RedisTemplate實現(xiàn)緩存信息監(jiān)控,一步一步的實現(xiàn)?Springboot?整合?Redis?來存儲數(shù)據(jù),讀取數(shù)據(jù),需要的朋友可以參考下2022-01-01詳解Java Project項目打包成jar,并生成exe文件
本篇文章主要介紹了Java Project項目打包成jar,并生成exe文件,非常具有實用價值,有興趣的可以了解一下。2017-01-01