## 并發(fā)編程
### 查看進程和線程
#### linux
進程
```
ps -fe //查看java進程
ps -fe | gropu java //使用管道運算符篩選java進程
jps //jdk自帶命令疏旨,查看進程windows也可用
kill pidxxx? //殺掉進程
```
線程
```
top -H -p pidxxx //查看進程下的所有線程
jstack pidxxx //抓取某一刻的線程信息
```
#### 棧與棧幀
main線程運行時內存圖冲杀,棧是線程私有的轿腺,所以此處只給線程main分配一個棧
#### 線程上下文切換
即多個線程輪流使用cpu莉炉,每次切換肝集,線程計數(shù)器都要記錄他的線程執(zhí)行到那一步了怕品。
#### 常見方法
##### join
join方法一般用于線程間通信 治笨,**底層原理是wait **
```java
main{
t.join(); //在main線程中調用t的join考婴,也就是說當t運行結束后main就運行
}
```
```java
main{
? t1.join();
? t2.join();
? //當t1和t2中運行最慢的結束后可以運行砌们,t1和t2可以并行運行
}
```
等待的時間已時間運行的時間為準
```
main{
t.join(10); //如果t運行只花了3s杆麸,那么main線程3s后就會運行,如果運行時間超過10s浪感,例如15s昔头,那么就mian就在10s后運行
}
```
##### interrept
1、打斷睡眠的線程和正常的線程
非睡眠狀態(tài)下打斷線程后打斷標志為true影兽,但線程繼續(xù)運行
2揭斧、兩階段中斷異常
3、isInterrupted()和interrupted()
前者不會清除打斷標志峻堰,后者會清除
4讹开、park
LockSupport.park();//當前線程阻塞 ,當使用interrupt打斷時可以繼續(xù)運行捐名,**打斷標記為正時park失效**
#### 主線程與守護線程
一般情況下當線程運行結束后進程才會結束旦万,對于守護線程來說當其他線程運行結束后只剩守護線程時進程也會結束