亚洲一级免费看,特黄特色大片免费观看播放器,777毛片,久久久久国产一区二区三区四区,欧美三级一区二区,国产精品一区二区久久久久,人人澡人人草

java語(yǔ)言

Java多線程知識(shí)點(diǎn)介紹

時(shí)間:2025-05-28 00:34:53 java語(yǔ)言 我要投稿
  • 相關(guān)推薦

Java多線程知識(shí)點(diǎn)介紹

  線程,有時(shí)被稱為輕量級(jí)進(jìn)程(Lightweight Process,LWP),是程序執(zhí)行流的最小單元。一個(gè)標(biāo)準(zhǔn)的線程由線程ID,當(dāng)前指令指針(PC),寄存器集合和堆棧組成。Java多線程知識(shí)點(diǎn)介紹分享給大家,歡迎大家閱讀!

Java多線程知識(shí)點(diǎn)介紹

  一、概述

  標(biāo)題很抽象,什么叫更簡(jiǎn)單?更是相比誰(shuí)來(lái)說(shuō)的呢?

  原來(lái),我們定義任務(wù),都是實(shí)現(xiàn)自Runnable或者Callable接口,但是這樣必然需要你將新定義的任務(wù)附著給線程,然后再調(diào)用線程啟動(dòng)。在不考慮Executor的情況下,你會(huì)感覺(jué)這么做很呆板,如果直接new一個(gè)任務(wù)對(duì)象,他自己就能啟動(dòng)的話,是不是更好?這就是更簡(jiǎn)單的線程這個(gè)標(biāo)題的由來(lái)。

  二、實(shí)現(xiàn)

  1.繼承自Thread

  因?yàn)門(mén)hread實(shí)現(xiàn)了Runnable接口,所以繼承自Thread的類(lèi),實(shí)現(xiàn)其run方法,其中定義的也就是任務(wù)。

  這樣做的好處是,可以直接調(diào)用父類(lèi)的start方法,可以實(shí)現(xiàn)概述中要實(shí)現(xiàn)的效果

  public class TaskExtendsThread extends Thread{ private int countDown = 5; private static int threadCount = 0; /* * 可以在它的構(gòu)造方法里直接調(diào)用run方法 */ public TaskExtendsThread(){ super(Integer.toString(++threadCount)); start(); } public String toString(){ return "#"+getName()+"("+countDown+")."; } public void run() { while(true){ System.out.println(this); if(--countDown == 0 ) return ; } } public static void main(String[] args){ for(int i = 0 ;i < 5 ;i++) new TaskExtendsThread(); }

  }

  這樣,在new一個(gè)對(duì)象時(shí)就會(huì)讓你的任務(wù)自動(dòng)附著給線程并啟動(dòng)。

  2.自管理的Runnable,實(shí)現(xiàn)Runnable接口。例如SelfManagedThread

  既然已經(jīng)有了Thread類(lèi)的實(shí)現(xiàn),為什么還要有自管理Runnable呢?這樣做和繼承Thread沒(méi)有區(qū)別,只是這樣做會(huì)讓你的類(lèi)更靈活,實(shí)現(xiàn)了該類(lèi)還可以繼承其他你想讓他繼承的類(lèi)。

  public class SelfManagedThread implements Runnable{ private int countDown = 5; private Thread t = new Thread(this); /* * 在構(gòu)造器中啟動(dòng)線程可能會(huì)變得很有問(wèn)題 * 因?yàn)榱硪粋(gè)任務(wù)可能會(huì)在構(gòu)造器結(jié)束之前開(kāi)始執(zhí)行,這意味著該任務(wù)能夠訪問(wèn)處于不穩(wěn)定狀態(tài)的對(duì)象 */ public SelfManagedThread(){ t.start(); } public String toString(){ return Thread.currentThread().getName()+"("+countDown+")."; } @Override public void run() { while(true){ System.out.println(this); if(--countDown==0) return; } } public static void main(String[] args){ for(int i = 0; i < 5 ;i++) new SelfManagedThread(); }

  }

  三、然并卵

  這個(gè)大標(biāo)題起的很好,因?yàn)槟壳盀橹梗恢肋@兩種方式,都是在構(gòu)造器中啟動(dòng)線程的,這可能會(huì)變的很有問(wèn)題,因?yàn)榱硪粋(gè)任務(wù)可能會(huì)在構(gòu)造器結(jié)束之前開(kāi)始執(zhí)行,這意味著該任務(wù)可能訪問(wèn)處于不穩(wěn)定狀態(tài)的對(duì)象.故:優(yōu)選Executor而不是顯示地創(chuàng)建Thread對(duì)象的一個(gè)原因,但是也不能說(shuō)這樣的解決方式完全沒(méi)有用,待有朋友看到文章后給些提示……

  四、線程的術(shù)語(yǔ)

  至此,關(guān)于線程的實(shí)現(xiàn),大部分總結(jié)完了,剩下的就是競(jìng)爭(zhēng)資源、線程同步等并發(fā)方面的問(wèn)題了。所以,在此總結(jié)下線程的術(shù)語(yǔ)

  術(shù)語(yǔ)

  |——線程并不是任務(wù),線程不做任何事情只是驅(qū)動(dòng)附著給它的任務(wù)執(zhí)行

  |——Runnable接口理解:可以理解為該方法的反型封裝,即它執(zhí)行能做的事情

  |——其實(shí)任務(wù)應(yīng)該實(shí)現(xiàn)一個(gè)名為T(mén)ask的接口,這樣更容易理解java中的線程

  |——從概念上講:我們希望創(chuàng)建獨(dú)立于其他任務(wù)運(yùn)行的任務(wù),因此我們應(yīng)該能夠定義任務(wù),然后說(shuō)“開(kāi)始”,并且不用操心細(xì)節(jié)。

  |——java的線程機(jī)制基于來(lái)自c的低級(jí)的p線程方式,這事你必須深入研究,并且需要完全理解其所有事務(wù)的所有細(xì)節(jié)的方式,這種低級(jí)特性部分地滲入 了java的實(shí)現(xiàn)中,因此為了處于更高的抽象級(jí)別,在編寫(xiě)代碼時(shí),你必須遵循規(guī)則

  |——任務(wù):在描述將要執(zhí)行的工作時(shí)使用術(shù)語(yǔ)“任務(wù)”;在引用到驅(qū)動(dòng)任務(wù)的具體機(jī)制時(shí),使用屬于“線程”

【Java多線程知識(shí)點(diǎn)介紹】相關(guān)文章:

java多線程介紹08-23

Java多線程知識(shí)點(diǎn)08-08

Java多線程的用法介紹09-15

關(guān)于Java多線程介紹09-09

java的多線程09-09

java多線程08-31

java語(yǔ)言的多線程08-29

java多線程教程11-03

如何使用java多線程08-23