zoukankan      html  css  js  c++  java
  • 谈一谈编程中遇到的一些死循环(递归死循环,AOP死循环,业务死循环)

    最简单最基础死循环,一般都是这样的

    while(1)  while(true)  for( ; ; )……

    然而在编程中常常会用到一些并不是那么基础的死循环,

    这里列举一些我在编程中所遇到的一些死循环

    方法已经不记得了,只是大概说明。

    1(递归死循环)

     

    2(AOP死循环)

    这个是递归死循环的变种

    学习Spring的同学都知道AOP面向切面编程,

    记得网上读过一篇博客说的是Spring中实现AOP不仅用到了jdk1.6的动态Proxy还使用了CGLIB。就可以实现接口和实体类都能被动态代理。

    对动态代理一直不太了解。有天闲着无聊就试着了解一下:

    CGLIB(Code Generation Library)详解

    https://blog.csdn.net/danchu/article/details/70238002

    自己在网上找了几篇文章看了一下,自己动手试试写个 JDBC的事务注解  Transaction

     

    这张图不知道能不能大概说明意思,意思大概就是使用CGLIB进行动态代理的时候,注意尽量别调用被代理对象的toString方法。否则会间接递归死循环。

    3(文件状态更新死循环,这个有点极端,可能大家不会碰见)

    这个是业务逻辑的系循环

    大二的时候学安卓,用的是AndroidStudio 当时学校有一个比赛联想智能交通的比赛,需要三个人用安卓坐一个app。当时思考一个问题,三个人做一个app一定在一个局域网下做一个app的,那么我能不能做个软件让三个人同时去操作一个项目。

    思路是这样的:

    后台运行一个线程一直去遍历一个指定的项目内的所有文件。如果一个文件的文件内容近期更改过。那就把文件发给好友。好友把更改的文件内容写入到文件上去即可,。当然这些读写内容也都是后台线程完成的。

    后来呢,这个东西的确也做出来了,但是呢,有编码问题,后来就没再管了。

    同时里面有关于死循环的两个问题值得思考

    (1)子线程中就需要一个死循环,这个死循环的做用就是用来一直遍历文件和查看文件更改状态。当然这个死循环是一个正常的死循环,是我们所需要的死循环,无非就是损耗了软件的性能

    后来在网上查到一个文件监听器的类。

    WatchService watcher = FileSystems.getDefault().newWatchService();

    这个类使用了观察者模式。不需要再使用死循环了,无疑提高了软件的性能。

    (2)另一个死循环发生在文件读写时。

    本来时当文件发生改变的时候发送文件到好友哪里去,由于每个客户端有相同的功能。

    那么问题就出在这里,当A的文件发生改变时,发送到B上去后,B把能让更新到本地后那么本地文件又发生了改变,B就会把这个跟A一模一样的文件再此发生给A。导致文件状态更改引发死循环。

  • 相关阅读:
    C# 委托、事件,lamda表达式
    visual studio快捷键大全
    从零开始编写自己的C#框架(28)——建模、架构与框架
    从零开始编写自己的C#框架(27)——什么是开发框架
    从零开始编写自己的C#框架(26)——小结
    从零开始编写自己的C#框架(25)——网站部署
    科班出身和培训上岗的程序员谁更牛?
    女友眼中的IT男
    一千个选择python的理由
    亲身经历:程序人生路上的荆棘与感动
  • 原文地址:https://www.cnblogs.com/bigfire/p/9888511.html
Copyright © 2011-2022 走看看