class Resource{
static boolean canUse=false;
}
while(!Resource.canUse){
//如果不可用,死循环在这里等待
}
//当资源可以使用后,就会跳出循环,往下执行
java.lang.IllegalMonitorStateException
public class WaitTest{
// 这是一个资源,模拟的Object
final NoObjct resource=new NoObjct();
public static void main(String[] args) throws Exception{
WaitTest d=new WaitTest();
d.test();
}
public void test() throws Exception{
Runnable r=new Runnable(){
public void run(){
// 调用资源的模拟的wait方法,在方法内部使用synchronized
resource.noWait();
System.out.println('线程等待完,执行');
}
};
Thread t=new Thread(r);
t.start();
Thread.sleep(2000);
System.out.println('准备唤醒等待资源的线程');
// 调用资源的模拟的notify方法,在方法内部使用synchronized
resource.noNotify();
}
}
// 因wait()和notify()是final方法,不能覆盖,所以模拟一个Object对象
class NoObjct{
// 模拟wait方法
public void noWait(){
// 这个就相当于将synchronized放到wait方法内部
synchronized(this){
try{
this.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
// 模拟notify方法
public void noNotify(){
// 这个就相当于将synchronized放到notify方法内部
synchronized(this){
this.notify();
}
}
}
public class WaitTest{
// 这是一个资源,模拟的Object
final Object resource=new Object();
public static void main(String[] args) throws Exception{
WaitTest d=new WaitTest();
d.test();
}
public void test() throws Exception{
Runnable r=new Runnable(){
public void run(){
// 必须使用synchronized
try{
synchronized(resource){
resource.wait();
}
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println('线程等待完,执行');
}
};
Thread t=new Thread(r);
t.start();
Thread.sleep(2000);
System.out.println('准备唤醒等待资源的线程');
// 必须使用synchronized
synchronized(resource){
resource.notify();
}
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有