2020-11-23

## 并发编程

### 查看进程和线程

#### linux

进程

```

ps -fe //查看java进程

ps -fe | gropu java //使用管道运算符筛选java进程

jps //jdk自带命令,查看进程windows也可用

kill pidxxx  //杀掉进程

```

线程

```

top -H -p pidxxx //查看进程下的所有线程

jstack pidxxx //抓取某一刻的线程信息

```

#### 栈与栈帧

main线程运行时内存图,栈是线程私有的,所以此处只给线程main分配一个栈

#### 线程上下文切换

即多个线程轮流使用cpu,每次切换,线程计数器都要记录他的线程执行到那一步了。

#### 常见方法

##### 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、打断睡眠的线程和正常的线程

非睡眠状态下打断线程后打断标志为true,但线程继续运行

2、两阶段中断异常

3、isInterrupted()和interrupted()

前者不会清除打断标志,后者会清除

4、park

LockSupport.park();//当前线程阻塞 ,当使用interrupt打断时可以继续运行,**打断标记为正时park失效**

#### 主线程与守护线程

一般情况下当线程运行结束后进程才会结束,对于守护线程来说当其他线程运行结束后只剩守护线程时进程也会结束

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容