認識執行緒,初始併發

語言: CN / TW / HK

執行緒學習

1. 什麼是執行緒

  • 程式

    是為完成特定任務,用某種語言編寫的一組 指令的集合 ,即指一段靜態的程式碼,靜態物件

  • 程序

    是程式的一次執行過程,或是正在執行的一個程式 。是一個動態的過程:有他自身的產生,存在和消亡的過程。程式是靜態的,程序是動態的;程序作為資源分配的單位,系統在執行時會為每個程序分配不同的記憶體區域。

  • 執行緒

    程序可進一步細化為執行緒, 是一個程式內部的一條執行路徑 。若一個程序同一時間並行執多個執行緒,就是支援多執行緒的;

    執行緒作為排程和執行的單位,每個執行緒擁有獨立的執行棧和程式計數器,執行緒切換的開銷小;

    一個程序中,多個執行緒共享相同的記憶體單元/記憶體地址空間,也就是說他們從同一堆中訪問相同的變數和物件,這就使得執行緒間通訊更簡便、高效。但多個執行緒操作共享的系統資源可能就會帶來安全的隱患。

2. 初識併發問題

  • 併發 :一個CPU(採用時間片)同時執行多個任務。比如:秒殺,多個人做同一件事

下面程式碼為例,讓我們瞭解什麼是併發:

//多個執行緒操作一個物件
//執行緒不安全,資料紊亂
public class TestThread01 implements Runnable {
	//票數
    private int tkicketNum=10;
    @Override
    public void run() {
        while (true){
            if(tkicketNum<1){
                break;
            }
            System.out.println(Thread.currentThread().getName()+"拿到了第"+ tkicketNum-- +"張票");
        }
    }
    public static void main(String[] args) {
        TestThread01 testThread01 = new TestThread01();
        new Thread(testThread01,"張三").start();
        new Thread(testThread01,"李四").start();
        new Thread(testThread01,"wangwu").start();

    }
}

結果如下: