帶你快速搞定java多線程

1、什麼是線程

線程是操作系統調度的最小單元,也叫輕量級進程。它被包含在進程之中,是進程中的實際運作單位。同一進程可以創建多個線程,每個進程都有自己獨立的一塊內存空間。並且能夠訪問共享的內存變量。

2、線程的狀態

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

圖片

3、怎麼通俗理解進程,線程?

舉個例子,開瞭一傢餐廳,餐廳這個實體就是進程,餐廳裡的服務員就是線程,餐廳裡的座位就是資源(遊戲內的數據),所有的服務員都可以安排客人就座,多個服務員安排座位就是多線程競爭,鎖也就是去排號。線程池就是有多個服務員一直站在那裡等著被呼叫。

圖片

4、線程和進程的區別

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

5、什麼是線程安全

在擁有共享數據的多條線程並行執行的程序中,線程安全的代碼會通過同步機制保證各個線程都可以正常且正確的執行,不會出現數據污染等意外情況。

圖片

類比:在餐廳裡,每個服務員都有一份自己排號,比如我剛剛安排瞭一個人去坐在8號座,那我想當然的以為是下一個是9號座,如果另外一個服務員同時安排瞭9號桌,我再去安排就會造成數據不安全瞭,出現問題瞭。

6、如何創建線程

java創建線程的三種方式:

  • 繼承Thread類創建線程類,無法繼承其他類。
  • 實現Runnable接口
  • 通過Callable和Future創建線程
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();
    }
}

總結:

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

本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: