【Java基础-并发编程】-运行原理与常用方法

本文介绍了在Windows、Linux和Java环境下查看进程线程的方法,探讨了线程运行的原理,包括栈帧和线程上下文切换。同时,列举了Java线程的常见方法,如start(),run(),join()等,并讨论了线程的状态和管理技巧。
摘要由CSDN通过智能技术生成

一、查看进程线程的方法

1.1 windows查看进程线程的方法

  • 任务管理器可以查看进程和线程数,也可以用来杀死进程
  • tasklist 查看进程
  • taskkill 杀死进程

1.2 linux查看进程线程的方法

  • ps -ef 查看所有进程
  • ps -ft -p <PID> 查看某个进程(PID)的所有线程
  • kill 杀死进程
  • top -H -p <PID> 查看某个进程(PID)的所有线程

1.3 java查看进程线程的方法

  • jps 命令查看所有Java进程
  • jstack <PID> 查看某个Java进程(PID)的所有线程

二、线程运行的原理

2.1 栈与栈帧

栈全称java virtual  machine stacks(java虚拟机栈)

JVM中由堆、栈、方法区所组成,其中栈内存是给谁用的呢?其实就是线程,每个线程启动后,虚拟机就会为其分配一块栈内存。

  • 每个栈由多个栈帧(Frame)组成,对应这每次方法调用时所占用的内存。
  • 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法。

2.2 线程上下文切换(Thread Context Switch)

因为一下原因导致CPU不再执行当前的线程,转而执行另一个线程的代码

  • 线程的cpu时间片用完
  • 垃圾回收
  • 有更高优先级的线程需要
  • 线程自己调用了sleep,yield、wait、join、park、synchronized、lock等方法

当Context Switch发生时,需要有操作系统保存当前线程的状态,并恢复另一个线程的状态,Java中对应的概念就是程序计数器(Program Counter Register),它的作用是记住下一条jvm指令的执行地址,是线程私有的。

  • 状态包括程序计数器、虚拟机栈中每个帧栈的信息,如局部变量、操作数栈、返回地址等
  • Context switch频繁发生会影响性能。

三、线程常见方法

方法名 static功能说明注意
start()启动一个新线程,在新的线程运行run方法中的代码

start方法只是让线程进入就绪,里面的代码不一定立刻运行

(CPU的时间片还没有分给它)。每个线程对象的start方法只

能调用一次,如果调用多次会出现IllegalThreadStateException

run()新线程启动后会调用的方法

如果在构造Thread对象时传递了Runnable参数,则线程启动

后会调用Runnable中的run方法,否则默认不执行任何操作。

但可以创建Thread的子类对象,来覆盖默认方法

join()等待线程运行结束
join(long n)等待线程运行结束,最多等待n毫秒
getId()获取线程长整型的idid唯一
getName()获取线程名
setName(String)修改线程名
getPriority()获取线程的优先级
setPriority()修改线程的优先级

java中线程的优先级是1~10的整数,较大的优先级能提高

该线程被CPU调度的几率。

getState()获取线程的状态java中线程的状态是用6个enum表示,分别为:NEW,RUNNABLE,BLOCK,WAITING,TIMED_WAITING,TERMINATED
isInterrupted判断是否被打断不会清除打断标记
isAlive线程是否存活(还没有运行完毕)
interrupt()打断线程

如果被打断线程正在sleep,wait,join。会导致被打断的线程抛

出InterruptedException,并清楚打断标记;如果打断的正在运行

的线程,则会设置打断标记;park的线程被打断,也会设置打断

标记

interrupted()static判断当前线程是否被打断会清除打断标记
currentThread()static获取当前正在执行的线程
sleep(long n)static让当前执行的线程休眠n毫秒,休眠时让出cpu的时间片给其它线程
yield()static提示线程调度器让出当前线程对CPU的使用主要是为了测试和调试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值