Java多线程的wait()和notify()例子
来源:互联网 发布:苹果删不掉windows系统 编辑:程序博客网 时间:2024/05/18 06:18
示例代码1:
package com.pinfo.test;
public class ThreadTest {
/**
* @param args
*/
public static void main(String[] args) {
String lock = "lock";
MyThread myThread = new MyThread(lock);
Thread t1 = new Thread(myThread);
t1.start();
try {
//确保线程t1先执行
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
SubThread sub = new SubThread(lock);
Thread t2 = new Thread(sub);
t2.start();
}
}
class MyThread implements Runnable{
String lock;
public MyThread(String lock){
this.lock = lock;
}
public void run(){
int i = 0;
//使用lock对象作为监视器
synchronized(lock){
while(i++<20){
try {
//每次暂停500毫秒是为了更好地看到效果
Thread.sleep(500);
System.out.println("The first thread.-->"+i);
if(i==10){
//调用lock监视器的wait()方法,通知本线程释放监视器,本线程等待
//其他也使用lock对象作为监视器的线程唤醒的时候,本线程得以继续运行
lock.wait();
//下面的wait(long timeout)表示:若等待5秒后还没有别的线程来唤醒的话,则本线程继续执行
//lock.wait(5000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class SubThread implements Runnable{
String lock;
public SubThread(String lock){
this.lock = lock;
}
public void run(){
int i = 0;
//这个线程也使用lock对象作为监视器
synchronized(lock){
while(i<10){
i++;
try {
Thread.sleep(500);
System.out.println("The second thread.-->"+i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//调用lock对象的notify()方法,唤醒同一对象监视器中调用wait的第一线程
//或者调用notifyAll()方法,唤醒同一对象监视器中调用wait的所有线程,具有最高优先级的线程首先被唤醒并执行
lock.notify();
}
}
}
示例代码2:
package com.pinfo.test;
public class ThreadTest {
/**
* @param args
*/
public static void main(String[] args) {
MyThread myThread = new MyThread(www.37meishi.com);
//使用Runnable实现类创建线程
Thread t1 = new Thread(myThread);
//启动线程
t1.start();
try {
//确保线程t1先执行
Thread.sleep(2000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
int i = 0;
//主线程使用myThread对象作为监视器
synchronized(myThread){
while(++i<=10){
try {
Thread.sleep(500);
System.out.println("The main thread.-->"+i);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//调用监视器的notify()方法唤醒t1线程
myThread.notify();
}
}
}
class MyThread implements Runnable{
public void run(){
int i = 0;
//使用对象本身this作为监视器(与主线程的监视器为同一个对象)
synchronized(this){
while(i++<20){
try {
Thread.sleep(500);
System.out.println("The sub thread.-->"+i);
if(i==10){
//释放监视器锁,阻塞等待...
this.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
- Java多线程的wait()和notify()例子
- Java多线程的wait()和notify()例子
- Java多线程wait()和notify()
- Java多线程,wait,notify,notifyAll的使用例子
- JAVA多线程中synchronized,wait和notify的关系
- JAVA多线程suspend()、resume()和wait()、notify()的区别
- JAVA多线程suspend()、resume()和wait()、notify()的区别
- java 多线程suspend()、resume()和wait()、notify()的区别
- JAVA多线程suspend()、resume()和wait()、notify()的区别
- JAVA多线程通信之wait和notify的使用
- Java多线程中wait和notify的异同
- java 多线程 wait()和notify(),notifyAll()的使用
- Java多线程wait/notify
- java的wait和notify
- Java多线程之wait()和notify()
- Java多线程之wait()和notify()
- java多线程notify和wait 转载
- [转]java多线程同步,wait和notify
- java多线程按顺序读数据
- win下安装dbeaver
- 在vs2010运行c程序时,控制台一闪而过怎么解决
- Unity 甲子游戏-入口界面
- redis安装
- Java多线程的wait()和notify()例子
- 反渗透设备:反渗透水处理设备技术特点说明
- Android系统移植方法详解1
- 打造linux下的source insight——vim插件安装使用总结
- solr4.x之原子更新
- php 函数
- 使用YSlow,对自己的网站进行评分
- UVa 10141 - Request for Proposal
- Centos服务器配置