JUC 程式設計

HuDu發表於2020-08-20

什麼是 JUC

JUC 程式設計

指的是java.util.concurrent工具包

業務:普通的執行緒程式碼 Thread
Runnable 沒有返回值、效率相比於 Callable相對較低

執行緒和程式

執行緒、程式

  • 程式:一個程式,例如QQ.exe,程式的集合;
    一個程式往往可以包含多個執行緒,至少包含一個
    Java預設集合執行緒?2個 main、GC
  • 執行緒:開了一個程式Typora,寫字,自動儲存(執行緒負責)
    對java而言:Thread、Runnable、Callable

Java真的可以開啟執行緒麼?開不了

public synchronized void start() {
        /**
         * This method is not invoked for the main method thread or "system"
         * group threads created/set up by the VM. Any new functionality added
         * to this method in the future may have to also be added to the VM.
         *
         * A zero status value corresponds to state "NEW".
         */
        if (threadStatus != 0)
            throw new IllegalThreadStateException();

        /* Notify the group that this thread is about to be started
         * so that it can be added to the group's list of threads
         * and the group's unstarted count can be decremented. */
        group.add(this);

        boolean started = false;
        try {
            start0();
            started = true;
        } finally {
            try {
                if (!started) {
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
                /* do nothing. If start0 threw a Throwable then
                  it will be passed up the call stack */
            }
        }
    }
//本地方法,底層的C++,Java無法直接操作硬體
    private native void start0();

併發、並行

併發程式設計:併發、並行

  • 併發(多個執行緒操作同一個資源)
    cpu一核,模擬出來多條執行緒,快速交替
  • 並行,CPU多核,多個執行緒可以同時執行;執行緒池
    public class Test1 {
      public static void main(String[] args) {
          //獲取cpu的核數
          //CPU密集型,IO密集型
         System.out.println(Runtime.getRuntime().availableProcessors());
      }
    }
    併發程式設計的本質:充分利用CPU的資源

執行緒狀態

Thread.State

//新生
NEW,

//執行
RUNNABLE,

//阻塞
BLOCKED,

//等待,死死的等
WAITING,

//超時等待
TIMED_WAITING,

//終止
TERMINATED;

wait/sleep

1、來自不同的類
wait => Object
sleep => Thread

2、關於鎖的釋放
wait 會釋放鎖,sleep睡著了,不會釋放

3、使用的範圍是不同的
wait必須在同步程式碼塊中
sleep可以在任何地方睡

4、是否需要捕獲異常
wait 不需要捕獲異常
sleep 必須捕獲異常
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章