观察多个线程同时运行 + 原理之线程运行和一些常见方法

主要是理解
 
     交替执行
     谁先谁后,不由我们控制
 
查看进程线程的方法
 
     windows
 
     任务管理器可以查看进程和线程数,也可以用来杀死进程
     tasklist
     查看进程
     taskkill
     杀死进程
 
linux
 
     ps - fe 查看所有进程
     ps - fT - p <PID> 查看某个进程( PID )的所有线程 kill 杀死进程
     top 按大写 H 切换是否显示线程
     top - H - p <PID> 查看某个进程(PID )的所有线程+
 
Java
 
     jps 命令查看所有 Java 进程
     jstack <PID> 查看某个 Java 进程( PID )的所有线程状态
     jconsole 来查看某个 Java 进程中线程的运行情况(图形界面)
 
jconsole 远程监控配置
 
     需要以如下方式运行你的 java
 

     修改 /etc/hosts 文件将 127.0.0.1 映射至主机名
 
如果要认证访问,还需要做如下步骤
 
     复制 jmxremote.password 文件
     修改 jmxremote.password jmxremote.access 文件的权限为 600 即文件所有者可读写
     连接时填入 controlRole (用户名), R&D (密码)
 
* 原理之线程运行
 
栈与栈帧
 
Java Virtual Machine Stacks Java 虚拟机栈)
 
我们都知道 JVM 中由堆、栈、方法区所组成,其中栈内存是给谁用的呢?其实就是线程,每个线程启动后,虚拟 机就会为其分配一块栈内存。
 
     每个栈由多个栈帧(Frame )组成,对应着每次方法调用时所占用的内存
     每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
 
线程上下文切换( Thread Context Switch
 
因为以下一些原因导致 cpu 不再执行当前的线程,转而执行另一个线程的代码
     线程的 cpu 时间片用完
     垃圾回收
     有更高优先级的线程需要运行
     线程自己调用了 sleep yield wait join park synchronized lock 等方法
 
Context Switch 发生时,需要由操作系统保存当前线程的状态,并恢复另一个线程的状态, Java 中对应的概念 就是程序计数器(Program Counter Register ),它的作用是记住下一条 jvm 指令的执行地址,是线程私有的
 
     状态包括程序计数器、虚拟机栈中每个栈帧的信息,如局部变量、操作数栈、返回地址等
     Context Switch 频繁发生会影响性能
 
常见方法
 

 

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务