什麼是 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多核,多個執行緒可以同時執行;執行緒池
併發程式設計的本質:充分利用CPU的資源public class Test1 { public static void main(String[] args) { //獲取cpu的核數 //CPU密集型,IO密集型 System.out.println(Runtime.getRuntime().availableProcessors()); } }
執行緒狀態
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 協議》,轉載必須註明作者和本文連結