JAVA線程用法詳解。本站提示廣大學習愛好者:(JAVA線程用法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是JAVA線程用法詳解正文
本文合營實例較為具體的講授了Java的線程技巧,信任關於深刻懂得Java法式設計有必定的贊助。詳細以下:
許多人在進修JAVA時都對線程都有必定的懂得,而當我們開端接觸Android開辟時,才真真正正的發明了線程是多麽的主要,本文就把對Java線程的用法心得分享給年夜家,供年夜家參考。
起首,年夜家必定要分清線程和過程不是一回事,過程是甚麼呢?過程就如我們須要履行class文件,而線程才是真正挪用CPU資本來運轉的。一個class文件普通只要一個過程,但線程可以有許多個,線程的履行是一種異步的履行方法。
1、若何在main函數中再開啟一個線程:
示例代碼以下:
public class Thread_one { public static void main(String [] args){ Run run = new Run(); //run.run();//此為辦法的挪用,和線程有著天地之別 Thread thread = new Thread(run); thread.start();//啟動線程,挪用線程的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); } } }
2、線程中的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();//中止線程的履行 //thread.stop();//絕對中止線程,stop過於粗魯,不建議應用,普通在須要強迫封閉子線程時方應用此辦法 } 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 ;//當捕捉到子線程被中止時,直接封閉子線程 } } } }
在這裡特殊解釋一點,thread.interrupt();可以中止線程的履行,絕對stop溫順那末一點點,不外還不是最好的封閉線程的辦法,上面就為年夜家供給一種方法:
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; } }
上面就簡略給年夜家引見一下線程中的歸並和讓出:
1、若何歸並線程,此處挪用了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();//歸並線程,此時相當於辦法挪用 } 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); } } }
2、若何讓出線程,此處挪用了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繼續方可以使用此辦法 } } } }
最初和年夜家分享一下關於線程的優先級的成績,代碼以下所示:
public class Thread_priority { /* * priority設置線程的優先級 * Thread默許的優先級為5;Thread的最年夜優先級為10,最小為0 */ public static void main(String [] args){ T1 t1 = new T1(); T2 t2 = new T2(); t1.start(); //t1.setPriority(Thread.NORM_PRIORITY+3);//設置t1的優先級 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); } } }
信任年夜家經由過程以上代碼根本曾經懂得JAVA中的線程機制,願望本文所述對年夜家深刻進修Java法式設計有所贊助。