java 多线程

  • Post author:
  • Post category:java


概念:

程序: 静态的代码

进程: 运行的静态代码需要占用空间,进程存在动态的过程:存在产生,存在和消亡的过程

线程:线程是由进程创建的,是进程的实体

单线程:同一个时刻,只允许执行一个线程

多线程:同一时刻,可以执行多个线程

并发:同一个时刻,多个任务交替执行

并行:同一个时刻,多个任务同时执行

线程的机制:

主线程结束,其他的子线程如果还在存活,子线程并不会死掉,影响服务

子线程中也可以再创建线程

所有的线程都结束的情况下,进程才会挂掉

线程启动的时候为什么调用的是run方法而不是start()方法

run方法就是一个普通方法,是一个串行化的执行

start方法才是执行真正的线程,并不会进行阻塞

native代表java 调用由非java语言实现的功能或者接口

start() 方法调用start0()方法后,该线程不一定会立马执行,只是将线程变成了可运行状态,具体什么时候执行,取决于cpu,由cpu统一调度。

start0是由jvm来调用,jvm不同的操作系统算法是不同的

实现Runable接口方式更加适合多个线程共享一个资源的情况,并且避免了单继承的限制

线程终止:

使用变量控制run方法退出的方式停止线程,即通知方式

线程常用的方法:

setName 设置线程名称

getName 返回线程名称

setPriority 更改线程的优先级

getPriority 获取线程的优先级

interrupt 中断线程 并没有真正的结束线程,所以一般用于中断正在休眠线程 使线程结束休眠

yield:线程的礼让,让出cpu,让其他线程执行,但礼让的时间不确定,所以也不一定礼让成功

join: 线程的插队,插队的线程一旦插队成功,则肯定先执行完插入线程的所有任务

用户线程:

工作线程,当线程的任务执行完成或通知方式结束

守护线程: 一般是为工作线程服务的,当所有的用户线程结束

synchronized 同步代码 解决多线程之间的资源抢占问题

synchronized 的原理:

增加一把锁

互斥锁:

每个对象都对应一个称为互斥锁的标记,这个标记用来保证在任一时刻,只能有一个县城访问该对象

线程的生命周期(暂时还不清楚)

同步方法如果没有static 默认锁对象为this 如果方法使用static修饰,默认锁对象:当前类.class

多个线程的锁对象为同一个即可

线程死锁:

线程同步的时候可能出现死锁的情况

ctrl+alt+t



版权声明:本文为weixin_40699635原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。