Java线程状态转换关系实例解析

网友投稿 215 2022-11-28


Java线程状态转换关系实例解析

状态1:新建一个线程并且开启start()方法,使java线程和操作系统线程联系起来;

状态2:Running——Waiting  :调用wait方法

synchronized(lock){

lock.wait(); //进入waiting状态,释放锁

}

synchronized(lock){

lock.notifyAll(); //,唤醒所有pEpLNLJlT线程,使所有在waiting状态的线程进入blocked状态,进入entry List队列和其他线程一起竞争锁

}

状态3Running——Waiting:调用join()方法   join()方法最终调用的也是wait方法,它使用了保护性暂停机制:当两个线程之间有关系时,比如一个线程需要等待另外一个线程的结果,t.join()所有其他的线程都必须等待t线程执行完了才能执行

public final void join() throws InterruptedException {

join(0);

}

public final synchronized void join(long millis)

throws InterruptedException {

long base = System.currentTimeMillis();

long now = 0;

if (millis < 0) {

throw new IllegalArgumentException("timeout value is negative");//判断是否超时

}

if (millis == 0) {

while (isAlive()) { //判断线程是否活着,如果

wait(0);

}

} else {

while (isAlive()) {

long delay = millis - now;

if (delay <= 0) {

break;

}

wait(delay);

now = System.currentTimeMillis() - base;

}

}

}

park(t)   unpark(t)  可以指定需要唤醒的线程,每一个线程都有一个parker对象 包含counter mutehttp://x 当线程调用  大致是下面这个意思

park(t){

if(t.ounter == 0)

t.wait;

else if (t.counter == 1)

counter = 0;

}

unpark(t){

if(t.counter == 1)

}

e;se if(t.counter == 0){

t.counter = 0;

唤醒t线程

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java多线程锁机制相关原理实例解析
下一篇:Spring如何基于注解显式实现自动装配
相关文章

 发表评论

暂时没有评论,来抢沙发吧~