成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java多線程的創(chuàng)建和狀態(tài)信息|樂字節(jié)

linkFly / 1523人閱讀

摘要:大家好,我是樂字節(jié)的小樂,好看好學的干貨又來了上一篇我們說到了多線程的概念以及優(yōu)缺點,本文將接著說多線程的創(chuàng)建,以及多線程的狀態(tài)。

大家好,我是樂字節(jié)的小樂,好看好學的Java干貨又來了!上一篇我們說到了Java多線程的概念以及優(yōu)缺點,本文將接著說Java多線程的創(chuàng)建,以及多線程的狀態(tài)。

一、創(chuàng)建線程 1、創(chuàng)建 Thread 的子類

創(chuàng)建: 繼承 Thread +重寫 run

啟動: 創(chuàng)建子類對象 對象.start()

創(chuàng)建 Thread 子類的一個實例并重寫 run 方法,run 方法會在調(diào)用 start()方法之后被執(zhí)行,示例如下:

public class MyThread extends Thread { 
public void run(){ 
for(int i=0;i<10;i++){ 
try { 
Thread.sleep(20); //模擬延時
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
System.out.println("一邊學習多線程");
} 
} 
public static void main(String[] args) {
//創(chuàng)建子類對象
MyThread myThread = new MyThread();
//啟動線程
myThread.start();
//也可以創(chuàng)建匿名子類
Thread thread = new Thread(){ 
public void run(){ 
for(int i=0;i<10;i++){ 
try { 
Thread.sleep(20);//模擬延時
} catch (InterruptedException e) { 
e.printStackTrace();
} 
System.out.println("一邊玩QQ"); 
} 
} 
}; 
thread.start(); 
for(int i=0;i<10;i++){ 
try {
Thread.sleep(20); //模擬延時
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
System.out.println("一邊玩微信..."); 
} 
}
}
2、實現(xiàn) Runnable 接口(推薦)

面向接口編程,避免單繼承局限

創(chuàng)建: 實現(xiàn) Runnable +重寫 run

啟動:靜態(tài)代理 Thread

a)、創(chuàng)建真實角色 實現(xiàn)類對象
b)、創(chuàng)建代理角色 Thread 對象+真實角色的引用
c)、代理角色.start()
此方式是新建一個實現(xiàn)了 java.lang.Runnable 接口的類的實例,實例中的方法可以被

線程調(diào)用。

缺點: 根據(jù)重寫規(guī)則,run 方法不能對外聲明異常,不能有返回值

public class MyRunnable implements Runnable { 
public void run(){ 
for(int i=0;i<10;i++){ 
try { 
Thread.sleep(20); //模擬延時 
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
System.out.println("一邊學習多線程"); 
} 
} 
public static void main(String[] args) { 
//使用代理創(chuàng)建線程 
Thread thread = new Thread(new MyRunnable()); 
//啟動線程 
thread.start(); 
//也可以創(chuàng)建一個實現(xiàn)了Runnable接口的匿名類 
Runnable myRunnable = new Runnable(){ 
public void run(){ 
for(int i=0;i<10;i++){ 
try { 
Thread.sleep(20);//模擬延時 
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
System.out.println("一邊玩QQ"); 
 
} 
} 
}; 
Thread t = new Thread(myRunnable); 
t.start(); 
for(int i=0;i<10;i++){ 
try { 
Thread.sleep(20); //模擬延時 
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
System.out.println("一邊玩微信..."); 
} 
} 
} 

優(yōu)點: 能聲明異常,能有返回值 缺點: 編寫復雜麻煩

public class Call { 
public static void main(String[] args) throws InterruptedException, ExecutionException { 
//創(chuàng)建線程 
ExecutorService ser=Executors.newFixedThreadPool(2); 
Race tortoise = new Race("老不死",1000); 
Race rabbit = new Race("小兔子",500); 
//獲取值 
Future result1 =ser.submit(tortoise) ; 
Future result2 =ser.submit(rabbit) ; 
Thread.sleep(2000); //2秒 
tortoise.setFlag(false); //停止線程體循環(huán) 
rabbit.setFlag(false); 
int num1 =result1.get(); 
int num2 =result2.get(); 
System.out.println("烏龜跑了-->"+num1+"步"); 
System.out.println("小兔子跑了-->"+num2+"步"); 
//停止服務 
ser.shutdownNow(); 
} 
} 
class Race implements Callable{ 
private String name ; //名稱 
private long time; //延時時間 
private boolean flag =true; 
private int step =0; //步 
public Race() { 
} 
public Race(String name) { 
super(); 
this.name = name; 
} 
public Race(String name,long time) { 
super(); 
this.name = name; 
this.time =time; 
} 
@Override 
public Integer call() throws Exception { 
while(flag){ 
Thread.sleep(time); //延時 
step++; 
} 
return step; 
} 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
public long getTime() { 
return time; 
} 
public void setTime(long time) { 
this.time = time; 
} 
public boolean isFlag() { 
return flag; 
} 
public void setFlag(boolean flag) { 
this.flag = flag; 
} 
public int getStep() { 
return step; 
} 
public void setStep(int step) { 
this.step = step; 
} 
} 
二、線程的狀態(tài)及信息 1、五種狀態(tài)

1)、新生狀態(tài): new
2)、就緒狀態(tài): runnable
3)、運行狀態(tài): running
4)、阻塞狀態(tài): blocked
5)、執(zhí)行完畢: dead

類似于運動員賽跑,

1)、新生狀態(tài):選出運動員
2)、就緒狀態(tài):走到起跑線,做好跑的動作,槍響后,不是馬上就跑,得有反應時間。
3)、運行狀態(tài):反應完成后,開始跑
4)、阻塞狀態(tài):路邊一個石頭絆倒了,馬上跑起來,嘟囔幾句,踢踢石頭, 不是馬上跑,重新反應進入就 緒。
5)、終止狀態(tài):跑完了,結(jié)束了,慢慢的走幾步停下來。

2、阻塞: sleep

模擬網(wǎng)絡延時,每個對象 都有一把排他鎖,不會釋放鎖

class Web12306 implements Runnable { 
private int tickets =20; //假設20張票 
private boolean flag =true; 
@Override 
public void run() { 
while(flag){ 
if(tickets>=0){ 
try { 
//模擬延時 
Thread.sleep(200); 
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
System.out.println(Thread.currentThread().getName()+"-->搶票"+tickets--); 
}else{ 
flag =false; 
} 
} 
} 
public static void main(String[] args) { 
//真實角色 目標 
Runnable target =new Web12306(); 
//代理角色 Thread +真實角色的引用 
Thread proxy1 =new Thread(target,"黃牛A"); 
Thread proxy2 =new Thread(target,"路人甲"); 
//代理行為 
proxy1.start(); //啟動線程 
proxy2.start(); //線程不安全,數(shù)據(jù)有問題 
} 
}

3、終止

不要調(diào)用 stop destory 方法 ,太暴力,一盆冷水讓其停止。

a、正常執(zhí)行完畢,循環(huán) 次數(shù)已經(jīng)到達

b、外部干涉

1)、線程中加入標識 -->屬性
2)、線程體中 使用改標識 -->死循環(huán)
3)、對外提供改變改標識的方法 setXxx() terminate() a()...
4)、外部根據(jù)適當?shù)臅r機調(diào)用該方法

4、當前線程

Thread.currentThread()

5、優(yōu)先級

只代表概率,不代表絕對先后順序

MIN_PRIORITY : 1

NORM_PRIORITY :5 默認優(yōu)先級

MAX_PRIORITY :10

getPriority() setPriority()

關(guān)于多線程的創(chuàng)建和狀態(tài)就介紹到這里,下次我們再說多線程的同步和線程通信,請關(guān)注樂字節(jié),原創(chuàng)文章,轉(zhuǎn)載請注明出處。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75975.html

相關(guān)文章

  • Java線程概念以及優(yōu)缺點、線程地位

    摘要:注意很多多線程是模擬出來的,真正的多線程是指有多個,即多核如服務器。對于目前的大家來說,線程掌握以下即可創(chuàng)建線程的方式停止線程簡單的關(guān)于多線程的概念和優(yōu)缺點就介紹到這,下一篇將會講講如何創(chuàng)建多線程。 大家好,樂字節(jié)小樂有來咯,上次說完了Java網(wǎng)絡編程探究|樂字節(jié),這次我們來看看線程相關(guān)的吧。 Java線程主要講述的內(nèi)容有:showImg(https://segmentfault.co...

    gitmilk 評論0 收藏0
  • Java網(wǎng)絡編程探究|字節(jié)

    摘要:換句話說,套接字起到通信端點的作用。單個套接字是一個端點,而一對套接字則構(gòu)成一個雙向通信信道,使非關(guān)聯(lián)進程可以在本地或通過網(wǎng)絡進行數(shù)據(jù)交換。 大家好,我是樂字節(jié)小樂,上次給大家講述了Java中的IO流之輸出流|樂字節(jié),本文將會給大家講述網(wǎng)絡編程。 主要內(nèi)容如下: 網(wǎng)絡 網(wǎng)絡分層 列表項目 IP位置 端口port 網(wǎng)絡編程 showImg(https://segmentfault.c...

    Kahn 評論0 收藏0
  • Java線程-同步:synchronized 線程通信:生產(chǎn)者消費者模式

    摘要:上次是說到了多線程的創(chuàng)建和狀態(tài)樂字節(jié),接下來,我們再來接著說多線程同步和線程通信生產(chǎn)者消費者模式。另一方面,線程通信使線程能夠等待其他線程的信號。 大家伙周末愉快,小樂又來給大家獻上技術(shù)大餐。上次是說到了Java多線程的創(chuàng)建和狀態(tài)|樂字節(jié),接下來,我們再來接著說Java多線程-同步:synchronized 和線程通信:生產(chǎn)者消費者模式。 一、同步:synchronized 多個線程同...

    wemallshop 評論0 收藏0
  • 字節(jié)Java反射之一:反射概念與獲取反射源頭class

    摘要:一反射機制概念程序運行時,允許改變程序結(jié)構(gòu)或變量類型,這種語言稱為動態(tài)語言,如,是動態(tài)語言顯然,,不是動態(tài)語言,但是有著一個非常突出的動態(tài)相關(guān)機制。相關(guān)的為二獲取源頭重點打開權(quán)限所有類的對象其實都是的實例。 一、Java反射機制概念 程序運行時,允許改變程序結(jié)構(gòu)或變量類型,這種語言稱為動態(tài)語言,如Python, Ruby是動態(tài)語言;顯然C++,Java,C#不是動態(tài)語言,但是JAVA有...

    caikeal 評論0 收藏0
  • 字節(jié)-Java8新特性之Date API

    摘要:上一篇文章,小樂給大家?guī)砹诵绿匦灾?,接下來本文將會給大家介紹新特性之前言通過發(fā)布新的來進一步加強對日期與時間的處理。 上一篇文章,小樂給大家?guī)砹薐ava8新特性之Optional,接下來本文將會給大家介紹Java8新特性之Date API 前言: Java 8通過發(fā)布新的Date-Time API來進一步加強對日期與時間的處理。 舊版的 Java 中,日期時間 API 存在諸多問題...

    suemi 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<