java 线程 join(wait) 后,是如何唤醒
2017-09-13 19:54
651 查看
Join 方法:本质上还是根据wait方法实现的。分析join源码发现join方法本身是使用了synchronized修饰符的。是加在方法上面的,意味着。 获取了当前对象的锁,然后继续发现里面的代码调用了wait。意味着我们先锁,再释放,等待唤醒,什么情况下被唤醒呢:
仔细查看join的源码,发现调用了wait(0),让程序等待,那么什么时间锁被释放呢?。因为是以线程对象作为锁的:
After run() finishes, notify() is called by the Thread subsystem.
当线程运行结束的时候,notify是被线程的子系统调用的
分别以普通对象和线程对象作为锁,当使用线程对象作为所得时候,如果锁对象执行完毕了。wait就会停止等待继续执行
仔细查看join的源码,发现调用了wait(0),让程序等待,那么什么时间锁被释放呢?。因为是以线程对象作为锁的:
After run() finishes, notify() is called by the Thread subsystem.
当线程运行结束的时候,notify是被线程的子系统调用的
分别以普通对象和线程对象作为锁,当使用线程对象作为所得时候,如果锁对象执行完毕了。wait就会停止等待继续执行
public class ThreadTestl { 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"); } } }
相关文章推荐
- java 线程 join(wait) 后,是如何唤醒
- JAVA 线程等待唤醒,wait and notify
- Java线程_wait,sleep,notify,notifyall,join
- java 线程wait()与notify()的用法(被唤醒后的线程到底重新执行同步代码块还是从那是等待的那里继续执行)
- java线程等待、设置优先级、同步、挂起、恢复(Join、setPriority、synchronized、wait、notify……)
- java之Thread线程相关yield()、sleep()、wait()、join()、run和start区别详解
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- java 线程:sleep join yield | wait notify notifyAll
- java线程wait,notify,yield,join方法
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- java 线程wait()与notify()的用法(被唤醒后的线程到底重新执行同步代码块还是从那是等待的那里继续执行)
- 线程间通信(等待,唤醒)&Java中sleep()和wait()比较
- Java线程之等待wait唤醒notify示例(一)
- Java线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- Java 线程协作 wait,notify,notifyAll,Sleep,Join,Condition
- java线程当中 sleep() join() yield()方法的简单比较以及如何保护共享数据介绍
- Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别