java 线程join的时候,是如何被notify的

Join 方法:本质上仍是根据wait方法实现的。分析join源码发现join方法自己是使用了synchronized修饰符的。是加在方法上面的,意味着。获取了当前对象的锁,而后继续发现里面的代码调用了wait。意味着咱们先锁,再释放,等待唤醒,什么状况下被唤醒呢:java

 

 

仔细查看join的源码,发现调用了wait(0),让程序等待,那么什么时间锁被释放呢?。由于是以线程对象做为锁的:ide

After run() finishes, notify() is called by the Thread subsystem.线程

 

当线程运行结束的时候,notify是被线程的子系统调用的code

 

分别以普通对象和线程对象做为锁,当使用线程对象做为所得时候,若是锁对象执行完毕了。wait就会中止等待继续执行对象

 

package com.famous.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPool {
	public static void main(String[] args) {

		final MyLockThread o = new MyLockThread();

		//final Object oo = new Object();
		new Thread(new Runnable() {

			@Override
			public void run() {
				synchronized (o) {
					System.err.println(1);
					try {
						o.wait(0);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.err.println(2);
				}
			}
		}).start();

		o.start();
	}

	static class MyLockThread extends Thread {

		public MyLockThread() {
		}

		@Override
		public void run() {
			System.err.println("MyLockThread");
		}

	}
}
相关文章
相关标签/搜索