对于web应用程序,异常释放锁的情况,很可能对你的应用程序业务逻辑产生必要严重的错误,比如:执行某个队列任务,很多对象都会去
等待第一个对象正常执行的结果返回再次去释放锁,那么其中摸个对象发生执行异常了,导致以业务没有执行完毕,就释放资源、锁,这种属于严重的错误。
public class MyThread5_synchronized2 { private int i=0; public synchronized void operation(){ while (true){ try { i++; Thread.sleep(200); System.err.println("∠"+Thread.currentThread().getName().toString()+",-> "+i); if (i==8){ throw new RuntimeException("执行错误"); } } catch (Exception e) { e.printStackTrace(); System.err.println(" error is :"+i); //continue;//应用storm 场景 //break; } } } public static void main(String[] args){ final MyThread5_synchronized2 s = new MyThread5_synchronized2(); Thread t = new Thread(new Runnable() { @Override public void run() { s.operation(); } },"t-1"); t.start(); } }
运行结果:
描述:
比如某个模块功能线程执行了20个任务的队列,当运行到第 8 个任务的时候,此时出现了一些业务的逻辑错误,但是并没有影响后续的操作。程序员 去数据库检查数据的时候,发现少了一个队列数据,这个时候就需要很花时间去调查。
处理方法:
while (true){ try { i++; Thread.sleep(200); System.err.println("∠"+Thread.currentThread().getName().toString()+",-> "+i); if (i==8){ Integer.parseInt("a"); //throw new RuntimeException("执行错误"); } } catch (Exception e) { e.printStackTrace(); System.err.println(" error is :"+i); continue;//应用storm 场景,继续执行,后续手动去操作这个任务 //break; 立即停止执行,并在此处加入一个日志监控 } }