JAVA并发编程-02-Java线程

创建和运行线程方式

方法一:继承Thread类,重写run方法
方法二:实现Runnable接口,把对象传入Thread。把【线程】和【任务】分开
原理区别:方法一是子类重写了Thread类的run方法,然后执行。
在这里插入图片描述
方法二把runnable类的target实例传给Thread类,执行了自己的任务。
在这里插入图片描述
总结:

推荐用runnable接口。

  • 方法1 是把线程和任务合并在了一起,方法2 是把线程和任务分开了 用
  • Runnable 更容易与线程池等高级 API 配合用
  • Runnable 让任务类脱离了 Thread 继承体系,更灵活

查看进程线程的方法

Windows

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

Linux

  • ps -fe 查看所有进程
  • ps -fT -p 查看某个进程(PID)的所有线程
  • kill 杀死进程
  • top 按大写 H 切换是否显示线程
  • top -H -p 查看某个进程(PID)的所有线程

JDK自带

  • jps 命令查看所有 Java 进程
  • jstack 查看某个 Java 进程(PID)的所有线程状态
  • jconsole 来查看某个 Java 进程中线程的运行情况(图形界面)

线程运行原理

栈与栈帧

Java Virtual Machine Stacks (Java 虚拟机栈)
我们都知道 JVM 中由堆、栈、方法区所组成,其中栈内存是给谁用的呢?其实就是线程,每个线程启动后,虚拟机就会为其分配一块栈内存。

  • 每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存
  • 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
    代码与图示
    在这里插入图片描述
    当运行到method1里sout(m)前的栈帧图示,程序计数器用来记录代码执行到哪行
    在这里插入图片描述
    当多个线程同时运行时,每个线程有自己独立的栈内存,里面有自己的栈帧,相互之间互不干扰
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值