`
he_wen
  • 浏览: 234136 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
线程池代码完整剖析(一) 一、概述       Jetty一个重要的组件就是线程池,本文主要是围绕源代码是怎样开发一个线程池,因为有一个任务需要处理,就直接从线程池里面取出一个线程,这样就加快应用程序的速度。 要开发一个线程池主要要注意的几个地方:   1、先要定义一个集合,这个集合主要是保存线程池里面的线程数目 2、因为线程池里面的线程不可能所有的线程都需要工作,所以要在定义一个集合专门用来保存线程池里面空闲的线程 3、然后,开发中不可能线程越多越好,这样会影响应用程序的性能,所以必须要定义变量,线程池中最大的线程和最小的线       程数目 4、如果任务的请求量已经把线程 ...
一、java中断机制   当外部线程对某线程调用了thread.interrupt()方法后,java语言的处理机制如下: 如果该线程处在可中断状态下,(调用了xx.wait(),或者Selector.select(),Thread.sleep()等特定会发生阻塞的api),那么该线程会立即被唤醒,同时会受到一个InterruptedException,同时,如果是阻塞在io上,对应的资源会被关闭。如果该线程接下来不执行“Thread.interrupted()方法(不是interrupt),那么该线程处理任何io资源的时候,都会导致这些资源关闭。当然,解决的办法就是调用一下 ...
本文章主要是通过基础篇应用Executor框架   一、如何寻找可并行的任务   为了使用Executor框架,你一定要把任务描述成Runnable,所以要设计这样的框架,主要是要做好确定任务的边界:一个好的任务边界是非常困难,因为涉及到任务的划分,每个任务有特定的运行时间,如果你划分的任务运行的时间不一致(运行长的时间的任务远远大于运行短时间的任务)时候,那么就会严重影响你应用程序的并发性,下面有具体的例子演示。    下面的例子主要是说明应用程序如何进行并行化   二、举例子   下面是一个用户请求页面的例子:      也就是页面的渲染:页面包含了文本文字和图片,下面 ...
    本文章的主题主要是在应用程序中寻找可以并行的任务,也就是把问题分成几个子问题。   一、讲解Executor和Executors以及ThreadPoolExecutor   public interface Executor{ void execute(Runnable command) ; }       执行已提交的 Runnable 任务的对象。     Executors是一个工厂类,它创建不同类型的线程池,主要是根据不同的参数配置。   下面还是主要说明ThreadPoolExecutor类中的构造方法,如:   public Thread ...
一、本文主要描述线程安全:       1.1: 什么是线程安全       1.2: 保持同步的原子性       1.3: 锁机制       1.4: 用锁保护状态       1.5: 激活性和性能   二、线程安全的类一般是无状态的对象、或者类 ...
本文主要是讲解java是如何实现动态代理,结合相关的例子和类图进行描述 下面的代码是借鉴了java reflection这本书,看完后对我收获非常的大。。。。。 一、  
八、The ManagerBase类   The ManagerBase类是一个抽象类( 它的父类是Manager类 )。这个类为它的孩子提供公共的功能,此外,ManagerBase有一个createSession方法创建一个会话对象。每个session有一个唯 一的标志符,这个标识符是由保护方法generateSessionId方法返回。         注意:一个激活的session是一个有效的会话对象,而没有过期。             一个特定的context下的Manager的实例管理整个激活的session. 这些激活的session存储在一个叫sessi ...
package test.hewen; import java.io.UnsupportedEncodingException; import java.util.Map; public class StringUtil { /*** * 把一个字符串分离开,并按照key/value形式保存到Map中 * @param map 字符串中的字符存放在map中 * @param data 要分离的字符串 * @param encoding 字符编码 * @throws UnsupportedEncodingException */ publi ...
本文章主要是控制HashMap权限如:设置一把锁(这里实现是通过一个布尔值locked)目的是想控制HashMap是否可以添加数据?是否可以清除数据?是否可以复制所有数据给另外一个HashMap? 如果布尔值为true,那么以上的操作都会报出异常。。。。   该类的名字叫做ParameterMap,它继承了HashMap类 。   请看下面的代码: 代码就不需要解释,因为里面已经解释的很详细,读者自己可以运行该程序。。。。 package ex09.pyrmont.startup; import java.util.HashMap; import java ...
注意:首先本程序是根据javaeye博主:java_mzd,对里面的代码进行改进,改进的地方如下:   1、如何创建动态数组,并且为用户提供了动态扩展数组长度的接口 2、修改在数组指定位置添加元素 3、该数组适应于多线程环境 4 ...
  第九章、会话管理 一、前言部分   Catalina通过一个叫做manager的组件来支持会话管理,它是由org.apache.catalina.Manager接口代表。A manager一直与context相关联,还有就是manager负责创建、更新、销毁会话对象同时也会返回任何组件所需要的有效的会话对象。   一个servlet通过调用javax.servlet.http.HttpServletRequest接口中的getSession方法获得一个session对象,该接口是在默认连接器里由org.apache.catalina.connector.HttpR ...
一、The Loader接口   在web应用程序中加载servlet和其他类时有一些规则。比如:在应用程序中加载一个servlet,被限制在the WEB-INF/classes目录以及子目录下。然而,servlet不会访问其他类,即使这些类包含运行在Tomcat中的JVM的CLASSPATH ...
第八章 、Loader加载器 一、前言部分   在前面的章节你已经看到了一个简单的loader实现,这是使用了加载servlet类。这章主要就解释了在Catalina中一个标准的web应用程序Loader组件。一个servlet容器需要定制Loader,而不是仅仅使用system's类加载器,因为这样的实现机制会导致一些不受信任的servelt被运行。如果你想加载全部servlets,需要引用servlet类的其他类就是使用了系统类加载器加载。正如我们前面章节所看到那样,一个servlet将能够访问任何类和类库如:运行在java虚拟机的环境变量CLASSPATH,这样就违背类安全的 ...
七、The FileLogger类   The FileLogger类是LoggerBase的子类,该子类是功能最为全面的类。该类一旦接收到与容器关联的消息时它就会把该消息写到一个文件中,并且 每条消息都会有任意的时间标记。当第一次实例该类时,这个类就会创建一个文件(文件名字就是创建文件的时间)。如果时间改变了,你将会创建一个新的文件并把任何消息都写到该文件(文件名字就是创建的时间)中。这个类的实例允许你在文件的名字添加一个前缀和后缀名。    在Tomcat4 中FileLogger类实现了Lifecycle接口,这样就十分的方便像其他组件(都实现了org.apache.ca ...
第七章、日志 一、前言部分   A Logger是一个记录消息的组件。在Catalina中的一个logger是与一个Container关联,该组件和其他组件相比是相对比较简单。Tomcat在org.apache.catalina.logger包中提供不同类型重做日志功能。在本章的应用程序将会在ex07.pyrmont包中找到,这两个类( SimpleContext,Bootstrap)发生了改变,其他的代码与第六章的应用程序都是一样。   在本章分为三个部分。第一个部分就是说明org.apache.catalina.Logger接口,该接口一定会被整个loggers实现。第二部 ...
Global site tag (gtag.js) - Google Analytics