Java多线程里面join方法会使被阻塞线程释放对象锁吗?
澳门赌场开户
澳门赌场开户
当前位置 : 澳门赌场开户 > 在线博彩导航

Java多线程里面join方法会使被阻塞线程释放对象锁吗?

Java多线程里面join方法会使被阻塞线程释放对象锁吗?
问题描述如下:

public class HelloJava {

    public static void mainString[] args {
        Object oo = new Object;
        MyThread t1 = new MyThread"线程t1--", oo;
        MyThread t2 = new MyThread"线程t2--", oo;
        t2.start;
        t1.start;
        try {
            t1.join;
        } catch InterruptedException e {
            e.printStackTrace;
        }
    }

}

class MyThread extends Thread{
    private String name;
    private Object oo;
    public MyThreadString name,Object oo{
        this.name = name;
        this.oo = oo;
    }
    @Override
    public void run {
        synchronized oo {
            forint i = 0; i < 1000; i++{
                System.out.printlnname + i;
            }
        }
    }
}

锁对象是同一个,从结果来看t1线程调join方法后还是乖乖等着,因为没有拿到锁,那么join方法不会使被阻塞对象释放锁,可是从Thread类源码来看又是调了wait方法的,这是什么情况?求解答。
这是jdk源码:

oo这把锁,从结果看,t2线程先持有,t2执行完才开始执行t1,这个你应该明白。join方法会造成当前线程wait,就如你看到的这里的wait0,是当前线程wait,并不是调用者wait,正如join方法的说明一样,Waits for this thread to die. 你的程序里,就是说主线程等到t1线程执行完以后再执行,主线程的wait状态,应该是由t1执行完成之后调用的notify解除,这个是native的,我只是猜测应该是这样。

栏目列表

广告位

澳门赌场开户