wait 、notify 、join、yield
来源:互联网 发布:知乎 东风 编辑:程序博客网 时间:2024/06/03 18:20
wait 和 notify 的例子
public class SimpleWN {
final static Object object = new Object();
public static class T1 extends Thread {
public void run() {
synchronized (object) {
System.out.println(System.currentTimeMillis() + ":T1 start!");
try {
System.out.println(System.currentTimeMillis()
+ ":T1 wait for object!");
object.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(System.currentTimeMillis() + ":T1 end!");
}
}
}
public static class T2 extends Thread {
public void run() {
synchronized (object) {
System.out.println(System.currentTimeMillis()
+ ":T2 start! notify one thread。");
object.notify();
System.out.println(System.currentTimeMillis() + ":T2 end!");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
}
}
}
public static void main(String[] args) {
Thread t1 = new T1();
Thread t2 = new T2();
t1.start();
t2.start();
}
}
1498132782164:T1 start!
1498132782164:T1 wait for object!
1498132782164:T2 start! notify one thread。
1498132782164:T2 end!
1498132784177:T1 end!
可以看出:T2通知T1执行后,T1不能立即执行,而是等待T2释放object锁,并重新获得锁后,才能继续执行。
join与yield的例子
public class joinMain {
public volatile static int i = 0;
public static class AddThread extends Thread {
@Override
public void run() {
for (i = 0; i < 100000; i++);
}
}
public static void main(String[] args) throws InterruptedException {
AddThread at = new AddThread();
at.start();
at.join();
System.out.println(i);
}
}
主函数,如果不使用join()等待AddThread,那么得到的i是0或者是很小的值,因为AddThread还没执行,i已经被输出了。但加入join后,标识主函数愿意等待AddThread执行完,跟着AddThread一起走,所有输出i=100000。
Thread.yield()一旦执行,它会使当前线程让出cpu(并不放弃cpu),让出后,还会进行cpu资源争夺,能否在分到资源就不一定了。意思就是说要歇一会,给其他线程更多的机会。
volatile对于保证操作的原子性有非常大的帮助。
阅读全文
0 0
- wait 、notify 、join、yield
- wait and notify 例子(yield/join)
- java线程wait,notify,yield,join方法
- sleep,yield,join,notify,wait,notifyAll区别
- 多线程的sleep,join,yield,wait,notify。
- wait、notify、notifyAll、sleep、join、yield
- Thread的wait sleep join yield suspend notify区别
- Thread的wait sleep join yield suspend notify区别
- Thread的wait sleep join yield suspend notify区别收藏
- sleep、join、yield、wait、notify、notifyAll、run、start、synchronized
- java sleep() join() yield() wait()和notify()、notifyAll() 区别详解
- Java多线程之wait,notify,sleep,,yield,join,suspend,resume
- 线程间协作:wait,notify,notifyAll,join,yield
- java Thread sleep yield join wait notify notifyAll
- Java 线程间的协作(wait/notify/sleep/yield/join)
- java 线程:sleep join yield | wait notify notifyAll
- 线程常用方法-sleep(),join(),yield(),wait(),notify()...
- java notify()、 notifyAll()、 wait()、sleep()、yield()、join()方法学习
- VS2015套接字编程时error C4996错误处理
- Android layout系列-autolayout
- UVa 11581
- C#阶乘递归算法
- 毕业两年
- wait 、notify 、join、yield
- 探秘MATLAB求FFT,计算能量谱
- ES6入门--let的基本使用
- 匿名类&本地类&默认方法
- 深度解析卷积神经网络的实现细节
- C的单双引
- codeforces 882C Hacker, pack your bags!
- C语言结构struct的内存对齐
- 20170704Windows10_08_临界区、线程静态变量、Slim锁、线程状态