模式4-Balking

参考《java多线程设计模式》

当警戒条件不成立就马上中断。

 // 若有资料修改,就存储到挡安里
    public synchronized void save() throws IOException {      
                                                              
        doSave();                                             
        changed = false;                                          
    }  
// 若有资料修改,就存储到挡安里  删除synchronized方法,并延长时间加大错误出现的机会。
    public  void save() throws IOException {      
        if (!changed) {                                           
            System.out.println(Thread.currentThread().getName() + " balks");
            return;                                             
        }                                                       
        doSave();    
        
        try{
        	Thread.sleep(100);
        }catch(InterruptedException e){
        	
        }
        changed = false;                                          
    }          

结果:有重复写入。

SaverThread calls doSave, content = No.0
ChangerThread balks
SaverThread calls doSave, content = No.1
ChangerThread balks
ChangerThread calls doSave, content = No.2
SaverThread calls doSave, content = No.2
ChangerThread balks
ChangerThread calls doSave, content = No.4
SaverThread calls doSave, content = No.4
ChangerThread balks
ChangerThread calls doSave, content = No.6
SaverThread calls doSave, content = No.7
ChangerThread balks
ChangerThread calls doSave, content = No.8
SaverThread calls doSave, content = No.9
ChangerThread balks
ChangerThread calls doSave, content = No.10
 
设置timeout,如果过了timeout时间,警戒条件没有满足,就抛出异常:
 
private static final long TIMEOUT = 30000;
public synchronized Request getRequest() {      
        long start = System.currentTimeMillis(); // 开始时间
        while (queue.size() <= 0) {                 
           
            try {                                   
                wait(rest);
            } catch (InterruptedException e) {      
            }                                       
        }                                           
        return (Request)queue.removeFirst();
    }

转载于:https://www.cnblogs.com/cxccbv/archive/2009/05/07/1452303.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值