【Java】并发编程-多线程基础篇

多线程基础篇

一、预热

1、进程VS线程

1)进程

进程是运行着的程序代码。一个进程只能对应一个程序代码,但一个程序代码可以对应多个进程。直白来说,程序代码是菜谱,进程是厨师烹饪的过程。对于同一个菜谱,可以有多个厨师同时按其制膳。

进程是操作系统分配资源的基本单位,进程之间的资源不共享。两个厨师同时在做清蒸鲈鱼,同一条鲈鱼不可同时被二者使用,因为最后做出来的是两盘,不是一盘。

2)线程

线程是进程的一段执行逻辑,一个进程可以由多个线程组成。厨师在制膳过程中,可能一边在一个锅里熬制浇汤,一边在另一个锅里蒸鱼,可能同时还在案板上制作配菜。
线程是操作系统进行任务调度的基本单位,同一个进程间的线程资源共享,不同进程间的线程资源不共享。

== 进程其实可以看做是承装线程的容器。==

2、并发vs并行

1)并发

并发是指在一段时间内,看起来像多个任务在同时执行。本质上是多个任务使用同一个cpu,但是它们轮流交替使用cpu的时间片,”天下武功唯快不破“,感知上误认为是自己独享cpu。

2)并行

并行是指在同一时间点上,任务在同时执行,即每个任务分别在不同的cpu上执行,是真正的独占cpu。

3、线程和进程的一些分类

主线程和子线程
一个进程只有一个主线程,它是程序的入口。子线程都是由主线程或者由主线程创建的子线程创建的。

父线程和子线程
创建子线程的线程是该子线程的父线程

用户线程和守护线程
用户线程是处理业务逻辑、提供服务的线程。守护线程是为用户线程提供服务的线程,如GC线程、编译优化的C1、C2线程。当全部的用户线程运行结束后,守护线程就会自动终止,无论它执行到什么位置。

僵尸进程和孤儿进程
僵尸进程和孤儿进程都是指子进程。

僵尸进程是指完成了任务没有被父进程清除掉的子进程。进程存在必留痕,它存在过的痕迹(进程id、进程状态等)是用于报告父进程的。如何清除僵尸进程?干掉它爹,让收容所init进程接管就成。

孤儿进程是指自己还没执行完毕父进程就已经执行完毕结束了的子进程。孩子没了爹怎么办?交给收容所init进程来处理就好。

4、查看进程&线程信息的命令和方式

1)windows

【命令行】

  • 查看进程
    • 查看alltasklist 在这里插入图片描述
    • 查看指定tasklist | findstr 进程名(java)
      在这里插入图片描述
  • 杀死进程taskkill /F /PID 进程id

【图形化界面】
邮件——任务管理

2)linux

【命令行】

  • 查看进程信息ps

    • 查看所有进程e的完备信息f——ps -ef或者ps -aux
      在这里插入图片描述
      在这里插入图片描述

    • 查看具体某个进程ps -ef | grep java

    • 按照cpu占用降序排序ps -aux --sort=-pcpu
      在这里插入图片描述

    • 按内存占用降序排序ps -aux --sort=-pmem

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值