### Java并發編程基礎
~~~
package com.stono.thread;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
public class MultiThread {
public static void main(String[] args) {
// 獲取Java線程管理MXBean
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
// 不需要獲取同步的monitor和synchronizer的信息,僅獲取線程和線程堆棧信息
ThreadInfo[] dumpAllThreads = threadMXBean.dumpAllThreads(false, false);
// 遍歷線程信息,僅打印線程ID和線程名稱信息
for (ThreadInfo threadInfo : dumpAllThreads) {
System.out.println("["+threadInfo.getThreadId()+"]"+threadInfo.getThreadName());
}
}
}
~~~
Thread.yield()把優先權交給別的線程;
Thread.setPriotiry(1-10, 默認5)設置線程優先級,但是操作系統不認;
Thread.join(等待的毫秒數),等我多少毫秒,不設毫秒就一直等;
Java線程的六種狀態:NEW, RUNNABLE, BLOCKED, WAITING(等待狀態,當前線程需要等待其他線程通知或者中斷), TIME_WAITING(超時等待,可以在指定時間自行返回), TERMINATED。
Java將操作系統中的運行和就緒兩個狀態合并稱為運行狀態。
中斷可以理解為一個標識位屬性,其他線程通過調用該線程的interrupt()方法對該線程進行中斷;isInterrupted()方法可以判斷自身是否被中斷過;但是,一個線程sleep中,被interrupt()之后,他的中斷標識就被jvm清除了;
等待/通知經典范式
~~~
synchronized(object){
while(條件不滿足){
object.wait();
}
邏輯處理;
}
synchronized(object){
改變條件
object.notifyAll();
}
~~~
管道輸入/輸出流主要包括4種實現:PipedOutputStream、PipedInputStream、PipedReader、PipedWriter,前兩種面向字節,后兩種面向字符;