欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

帶你快速搞定java多線程

 更新時間:2021年07月14日 11:37:17   作者:香菜聊游戲  
這篇文章主要介紹了java多線程編程實例,分享了幾則多線程的實例代碼,具有一定參考價值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下

1、什么是線程

線程是操作系統(tǒng)調(diào)度的最小單元,也叫輕量級進(jìn)程。它被包含在進(jìn)程之中,是進(jìn)程中的實際運(yùn)作單位。同一進(jìn)程可以創(chuàng)建多個線程,每個進(jìn)程都有自己獨(dú)立的一塊內(nèi)存空間。并且能夠訪問共享的內(nèi)存變量。

2、線程的狀態(tài)

線程的狀態(tài)一般看到的也就是Runable 和blocked ,最多的還是blocked,因為cpu的時間片很短,切換的很快等待IO,等待臨界資源。大概知道就好

圖片

3、怎么通俗理解進(jìn)程,線程?

舉個例子,開了一家餐廳,餐廳這個實體就是進(jìn)程,餐廳里的服務(wù)員就是線程,餐廳里的座位就是資源(游戲內(nèi)的數(shù)據(jù)),所有的服務(wù)員都可以安排客人就座,多個服務(wù)員安排座位就是多線程競爭,鎖也就是去排號。線程池就是有多個服務(wù)員一直站在那里等著被呼叫。

圖片

4、線程和進(jìn)程的區(qū)別

進(jìn)程它是具有獨(dú)立地址空間的,優(yōu)點(diǎn)就是隔離度好,穩(wěn)定,因為它是操作系統(tǒng)管理的,進(jìn)程和進(jìn)程之間是邏輯隔離的,只要操作系統(tǒng)不出問題的話,一個進(jìn)程的錯誤一般不會影響到其它進(jìn)程,缺點(diǎn)就是信息資源共享麻煩。而線程只是進(jìn)程啟動的執(zhí)行單元,它是共享進(jìn)程資源的,創(chuàng)建銷毀、切換簡單,速度很快,占用內(nèi)存少,CPU利用率高。但是需要程序員管控的東西也比較多,相互影響出問題的機(jī)率較大,一個線程掛掉將導(dǎo)致整個進(jìn)程掛掉,所以從程序員的角度來講,我們只能看到某種代碼是線程安全的,而沒有說進(jìn)程安全的。

5、什么是線程安全

在擁有共享數(shù)據(jù)的多條線程并行執(zhí)行的程序中,線程安全的代碼會通過同步機(jī)制保證各個線程都可以正常且正確的執(zhí)行,不會出現(xiàn)數(shù)據(jù)污染等意外情況。

圖片

類比:在餐廳里,每個服務(wù)員都有一份自己排號,比如我剛剛安排了一個人去坐在8號座,那我想當(dāng)然的以為是下一個是9號座,如果另外一個服務(wù)員同時安排了9號桌,我再去安排就會造成數(shù)據(jù)不安全了,出現(xiàn)問題了。

6、如何創(chuàng)建線程

java創(chuàng)建線程的三種方式:

  • 繼承Thread類創(chuàng)建線程類,無法繼承其他類。
  • 實現(xiàn)Runnable接口
  • 通過Callable和Future創(chuàng)建線程
package thread;
/**
 * @author 香菜
 */
public class ExtendThread extends Thread {
    @Override
    public void run() {
        System.out.println("ExtendThread");;
    }
}
package thread;
import java.util.concurrent.Callable;
/**
 * @author 香菜
 */
public class ImpCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        System.out.println("Callable ");
        return 1;
    }
}
package thread;
/**
 * @author 香菜
 */
public class ImpRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("Runnable");
    }
}
package thread;
import java.util.concurrent.FutureTask;
/**
 * @author 香菜
 */
public class Aain {
    public static void main(String[] args) {
        new ExtendThread().start();
        new Thread(new ImpRunnable()).start();
        new Thread(new FutureTask<>(new ImpCallable())).start();
    }
}

總結(jié):

線程的概念來自于生活,理解了概念,在項目中思考的時候只要搞清楚項目的線程模型,基本上不會遇到太大的問題。

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java全面解析XML格式串(JDOM解析)

    Java全面解析XML格式串(JDOM解析)

    下面小編就為大家?guī)硪黄狫ava全面解析XML格式串(JDOM解析)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • java中Scanner.next()和Scanner.nextLine的區(qū)別圖文詳解

    java中Scanner.next()和Scanner.nextLine的區(qū)別圖文詳解

    使用java語言編程,最常用的輸入就是使用Scanner了,它的構(gòu)造很簡單,這篇文章主要給大家介紹了關(guān)于java中Scanner.next()和Scanner.nextLine區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • 深度解析Java中ArrayList的使用

    深度解析Java中ArrayList的使用

    ArrayList?類是一個可以動態(tài)修改的數(shù)組,與普通數(shù)組的區(qū)別就是它是沒有固定大小的限制,我們可以添加或刪除元素。本文將通過示例帶你深度解析Java中ArrayList的使用,需要的可以參考一下
    2022-09-09
  • Java實現(xiàn)九九乘法表的小例子

    Java實現(xiàn)九九乘法表的小例子

    九九乘法表一般為三角形,每個數(shù)分別和從1到自身的數(shù)相乘然后把結(jié)果列出來,即要用到兩層循環(huán),外層是從1到9for(i=1;i<=9;i++),內(nèi)層是當(dāng)前數(shù)和從1到自身相乘for(j=1;j<=i;j++)
    2013-09-09
  • java虛擬機(jī)JVM類加載機(jī)制原理(面試必問)

    java虛擬機(jī)JVM類加載機(jī)制原理(面試必問)

    這篇文章主要介紹了面試當(dāng)中必會問到的java虛擬機(jī)JVM類加載機(jī)制,非常的詳細(xì),有需要的朋友可以借鑒參考下,歡迎多多交流討論
    2021-08-08
  • Mybatis動態(tài)SQL的示例代碼

    Mybatis動態(tài)SQL的示例代碼

    本文主要介紹了Mybatis動態(tài)SQL的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Java 中ThreadLocal類詳解

    Java 中ThreadLocal類詳解

    什么是ThreadLocal?顧名思義它是local variable(線程局部變量)。它的功用非常簡單,就是為每一個使用該變量的線程都提供一個變量值的副本,是每一個線程都可以獨(dú)立地改變自己的副本,而不會和其它線程的副本沖突。從線程的角度看,就好像每一個線程都完全擁有該變量。
    2016-03-03
  • 淺析java中ArrayList與Vector的區(qū)別以及HashMap與Hashtable的區(qū)別

    淺析java中ArrayList與Vector的區(qū)別以及HashMap與Hashtable的區(qū)別

    以下是對java中ArrayList與Vector的區(qū)別以及HashMap與Hashtable的區(qū)別進(jìn)行了詳細(xì)的解析。需要的朋友可以過來參考下
    2013-08-08
  • Java的深拷貝與淺拷貝的幾種實現(xiàn)方式

    Java的深拷貝與淺拷貝的幾種實現(xiàn)方式

    這篇文章主要介紹了Java的深拷貝與淺拷貝的幾種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java實現(xiàn)“年-月-日 上午/下午時:分:秒”的簡單代碼

    Java實現(xiàn)“年-月-日 上午/下午時:分:秒”的簡單代碼

    當(dāng)前的日期輸出的方法有很多,本文為大家介紹下在java中是如何實現(xiàn)“年-月-日 上午/下午時:分:秒”,感興趣的朋友不妨參考下
    2015-08-08

最新評論