多线程
2021-07-30 11:40:24 38 举报
JVM多线程生命周期
作者其他创作
大纲/内容
OS
suspend()
synchronized
线程 A
Node
prev
thread=线程 D
LockSupport.park(this);
通过自旋进行阻塞
fun()
阻塞线程
CPU
LockSupport.parkUntil(long);
thread=线程 C
LockSupport.unpark(Thread)
Tread.stop()
void Thread::start(Thread* thread)
next
Object.notify()
resume()
分代年龄
AQS
死亡
unlock()
LockSupport.parkNanos(long)
Y
运行(RUNNING)
同步锁标记
state == 0
线程 B
objectMonitor
thread=null
超时等待(TIME_WATING)
实例数据Klass Point
CPU 调度算法
lock()
run()
尝试直接上锁
锁状态(state)0 无锁,>0 有锁
exclusiveOwnerThread == Thread.currentThread() state+1
NonfairSync
阻塞(Blocked)
对象头
对齐填充
FairSync
Thread.sleep(long)
Object.wait(long);
等待同步锁
Thread
就绪
notify()/notifyAll()
新建
LockSupport.park()
monitor
出现Exception 未处理
类元信息
阻塞
终止(TERMINATED)
wait()/join()
偏向锁标记持有者线程id
等待(WATING)
public class ThreadDeme extends Thread{ @Override public void run() { System.out.println(\"线程:\"+ Thread.currentThread().getName()); }}
对象在heap中的布局
Object.join()
运行
Object.notifyAll()
JVMThrad::run
Tread.start()
head
run() 执行完毕
hostpsot thread.cpp
markOop
对象标记
JVM
RUNNABLE
acquire(1)
ReentrantLock
Object.wait()
new ThreadDeme().start();
start()
thread=线程 B
sleep()
unLock()
独占线程等于当前线程
os::create_threados::start_thread
Thread.interrupt()
新建(NEW)
线程 C
出现 Exception 未处理
获取同步锁
hashCode
state - 1
获取锁
偏向锁标记
stop()
是否锁和抢占锁临界区
return true
独占线程(exclusiveOwnerThread)
JVM 回调Run方法
就绪(READY)
Thread().join(long)
CAS 修改 State 的值
线程 D
sleep() 结束
final void lock() { acquire(1); }
0 条评论
下一页