JAVA 线程等待唤醒,wait and notify
2013-09-13 09:02
651 查看
wait,notify操作是同一个对象锁,简单例子如下
package com.cienet.wangbin.test;
public class Test7 {
/**
* @param args
*/
public static void main(String[] args) {
new Thread1().start();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread2().start();
}
static class Thread1 extends Thread {
@Override
public void run() {
super.run();
int count = 10;
synchronized (Test7.class) {
for (int i = 0; i < count; i++) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i == 2) {
try {
Test7.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(i);
}
}
}
}
static class Thread2 extends Thread {
@Override
public void run() {
super.run();
int count = 10;
synchronized (Test7.class) {
for (int i = 0; i < count; i++) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i == 5) {
Test7.class.notify();
}
System.out.println("b" + i);
}
}
}
}
}
如上结果可知,wait是会释放锁的,而notify不会释放锁,当调用它的时候,不能够直接唤醒wait住的线程,而是先等其本身执行完毕后才释放锁。wait住的资源才能获取锁,继续执行。
package com.cienet.wangbin.test;
public class Test7 {
/**
* @param args
*/
public static void main(String[] args) {
new Thread1().start();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread2().start();
}
static class Thread1 extends Thread {
@Override
public void run() {
super.run();
int count = 10;
synchronized (Test7.class) {
for (int i = 0; i < count; i++) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i == 2) {
try {
Test7.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(i);
}
}
}
}
static class Thread2 extends Thread {
@Override
public void run() {
super.run();
int count = 10;
synchronized (Test7.class) {
for (int i = 0; i < count; i++) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i == 5) {
Test7.class.notify();
}
System.out.println("b" + i);
}
}
}
}
}
如上结果可知,wait是会释放锁的,而notify不会释放锁,当调用它的时候,不能够直接唤醒wait住的线程,而是先等其本身执行完毕后才释放锁。wait住的资源才能获取锁,继续执行。
相关文章推荐
- Java-线程$等待唤醒机制(wait,notify)
- java多线程学习之线程通信-wait()等待 notify()唤醒
- java 线程wait()与notify()的用法(被唤醒后的线程到底重新执行同步代码块还是从那是等待的那里继续执行)
- Java线程之等待wait唤醒notify示例(一)
- java 线程wait()与notify()的用法(被唤醒后的线程到底重新执行同步代码块还是从那是等待的那里继续执行)
- java多线程-线程间通信-示例代码-解决安全问题-等待唤醒机制wait()notify()notifyAll()
- 线程通信(子线程运行10次,主线程运行100次,如此循环50次)[用condition替代wait,notify等待和唤醒操作]
- java 中wait和notify 线程等待和线程唤醒的使用方式 需要借助synchronized
- Java线程等待wait通知notify方法的使用
- Java多线程之线程间通信--等待(wait)/通知(notify)机制,等待/通知之交叉备份实例
- Java 线程wait, notify and notifyAll 示例
- Java多线程--同步与死锁:synchronized;等待与唤醒:wait、notify、notifyAll;生命周期
- java线程等待、设置优先级、同步、挂起、恢复(Join、setPriority、synchronized、wait、notify……)
- Java多线程基础 线程的等待与唤醒(wait、notify、notifyAll)
- Java线程中的wait, notify and notifyAll
- 线程间通信(等待,唤醒)&Java中sleep()和wait()比较
- java线程等待、设置优先级、同步、挂起、恢复(Join、setPriority、synchronized、wait、notify……)
- Java多线程---------同步与死锁:synchronized;等待与唤醒:wait、notify、notifyAll;生命周期
- java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)
- 【Java】线程中的wait和notify