`
annegu
  • 浏览: 98676 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论
文章列表
对于多线程编程来说,同步问题是我们需要考虑的最多的问题,同步的锁什么时候加,加在哪里都需要考虑,当然在不影响功能的情况下,同步越少越好,锁加的越迟越优是我们都必须认同的。DCL(Double Check Lock)就是为了达到这个目的。 DCL简单来说就是check-lock-check-act,先检查再锁,锁之后再检查一次,最后才执行操作。这样做的目的是尽可能的推迟锁的时间。网上普遍举的一个例子是延迟加载的例子。 public class LazySingleton { private static volatile LazySingleton instance; publi ...
/**     *@author annegu     *@date 2009-12-02     */ Hashmap是一种非常常用的、应用广泛的数据类型,最近研究到相关的内容,就正好复习一下。网上关于hashmap的文章很多,但到底是自己学习的总结,就发出来跟大家一起分享,一起讨论。 1、hashmap的数据结构 要知道hashmap是什么,首先要搞清楚它的数据结构,在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,hashmap也不例外。Hashmap实际上是一个数组和链表的结合体(在数据结构中,一般称之为 ...
最近工作中用到了JMX,遇到了一些问题,正好记录一下。 spring的jmx配置文件就是参考文档的,见最后。 稍稍说明三点: (1) Registry bean用来注册一个rmi的连接器,告知开启的端口号。 (2) ServerConnector用来构建服务器端的连接,这 ...
/**   * author:annegu  * date:2009-07-16   */ annegu做了一个简单的Http多线程的下载程序,来讨论一下多线程并发下载以及断点续传的问题。 这个程序的功能,就是可以分多个线程从目标地址上下载数据,每个线程负责下载一部分,并可以支持断点续传和超时重连。 下载的方法是download(),它接收两个参数,分别是要下载的页面的url和编码方式。在这个负责下载的方法中,主要分了三个步骤。第一步是用来设置断点续传时候的一些信息的,第二步就是主要的分多线程来下载了,最后是数据的合并。 1、多线程下载: public String dow ...
/** *作者:annegu *日期:2009-07-01 */ Mysql是一个中小型关系型数据库管理系统,目前使用的也比较广泛。为了对开发中间dao层的问题能有更深的理解,在遇到问题的时候能够有更多的思路,于是研究了一下mysql驱动的使用,并且在这过程中也发现了一直以来关于PreparedStatement常识理解上的错误,与大家分享。 下面是个最简单的使用jdbc取得数据的应用。在例子之后我将分成4步,分别是①取得连接,②创建PreparedStatement,③设置参数,④执行查询,来分步分析这个过程。除了设置参数那一步之外,其他的我都画了时序图,如果不想看文字的话,可以对着时序 ...
/** *作者:annegu *日期:2009-06-24 */ 现在我们从connector.getContainer().getPipeline().getFirst().invoke(request, response)开始进入容器... 前面说到容器的时候,anne一直都只有说三个容器,engine, host, context。其实在context之下,还有一个容器,叫做wrapper,每个wapper包含了一个servlet,因此前文没有接触到servlet的时候,就暂时省略了。好了,现在我们知道了有这四个级别的容器。这四个容器素由上至下逐渐细分,形成树状结构,构成了tomca ...
/** *作者:annegu *日期:2009-06-22 */ 3、SocketProcessor:这个类是真正处理用户请求的类。 我们只看最重要的一步,如何处理channel: boolean closed = (status==null)?(handler.process(socket)==Handler.SocketState.CLOSED) : (handler.event(socket,status)==Handler.SocketState.CLOSED); 这里的handler是Http11NioProtocal里面的一个子类Http11ConnectionHan ...
/** *作者:annegu *日期:2009-06-20 */ 在这第三部分里面我们主要看一下tomcat是如何接收客户端请求,并把这个请求一层一层的传递到子容器中,并最后交到应用程序中进行处理的。 首先,我们来了解一下什么叫做NIO和BIO。 在前面的解读tomcat里面,我们已经说到过了线程池。线程池,顾名思义,里面存放了一定数量的线程,这些线程用来处理用户请求。现在我们要讨论的NIO和BIO就是如何分配线程池中的线程来处理用户请求的方式。 BIO(Block IO):阻塞式IO。在tomcat6之前一直都是采用的这种方式。当一个客户端的连接请求到达的时候,ServerSocket ...
/** *作者:annegu *日期:2009-06-16 */ 对于engine, host, context来说,它们都属于容器,当接收到客户端请求的时候,请求会被传递到容器中,在一个容器中处理完毕之后,会被传递给下一个容器处理。因此,我们可以这样理解tomcat,总的 ...
/** *作者:annegu *日期:2009-06-16 */ 首先搞清楚几个概念:Servlet容器与web容器。Servlet容器的主要任务是管理servlet的生命周期,而web容器更准确的说应该叫web服务器,它是来管理和部署web应用的。还有一种服务器叫做应用服务器,它的功能比web服务器要强大的多,它可以部署EJB应用,可以实现容器管理的事务,一般的应用服务器有weblogic和websphere等,它们都是商业服务器,功能强大但都是收费的。web容器最典型的就是tomcat,apache了。 Tomcat是一个免费的开源的Serlvet容器,也就是说它可以处理servlet请 ...
    数据库连接的建立与关闭对于一个应用来说是耗费系统资源的操作。传统的数据库连接是通过DriveManager来实现的,每个数据库连接对象都对应了一个实际的物理数据库连接,每次都要新建一个数据库连接,并且在使用完毕之 ...
代理的核心任务就是拦截方法的调用,并在需要的时候执行匹配某方法的通知链。 代理分为静态代理和动态代理。 1、什么叫做静态代理呢,所有的java文件都会被编译成.class文件,.class文件其实就是一组可以被java虚拟机所解释执行的字节码,这些字节码组成了一系列的指令组。 可以在命令行模式下敲入“javap –c TestJob”查看TestJob.class的字节代码。 Javap命令的作用是将一个类和它的方法的一些转储信息输出到标准输出。在你想要查看编译器做了些什么工作的时候,或者想要看一处代码的改动对编译后的类文件有什么影响的时候,javap相当有用。-c选项告诉javap反汇编在 ...
Spring是指一个用于构造java应用程序的轻量级框架。Spring框架的核心基于“控制反转(Inversion of Control, IoC)”的原理。 IoC是一种将组件依赖关系的创建和管理置于程序外部的技术。 1、在依赖托拽中,依赖关系是根据需要从一个集中的注册处获取的。 如: BeanFactory factory = new XmlBeanFactory(new FileSystemResource(config.getServletContext().getRealPath("") + "/WEB-INF/classes/spring/a ...
1、Servlet是使用Java Servlet应用程序设计接口及相关类和方法的Java程序。它通过创建一个框架来扩展服务器的能力,以提供在Web上进行请求和响应服务,充当一个桥梁的角色来联系客户机与应用程序,负责把客户机发出的请求封装成程序人员编写的应用程序中需要的对象。当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet,并让 Servlet 建立起服务器返回给客户机的响应。 当启动 Web 服务器或客户机第一次请求服务时,可以自动装入 Servlet。装入后, Servlet 继续运行直到其它客户机发出请求。 2、Servlet的生命周期始于将它装入Web服务器的内存 ...
osworkflow中的主要方法源码分析 一、 doAction方法 Workflow fw = new BasicWorkflow("username"); //创建一个workflow long id = Long.parseLong(request.getParameter("workflowId")); String doActionString = request.getParameter("doAction"); //从request中得到将要进行的动作 if (doActionString != null ...
Global site tag (gtag.js) - Google Analytics