`
韩悠悠
  • 浏览: 839797 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

8.连接器

 
阅读更多

一个可以创建更好的请求和响应对象的连接器,
一个符合Servlet 2.3和2.4规范的连接器必须创建javax.servlet.http.HttpServletRequest和javax.servlet.http.HttpServletResponse,并传递给被调用的servlet的service方法
,连接器解析HTTP请求头部并让servlet可以获得头部, cookies, 参数名/值等等
Tomcat所采用的方法是在一个属性文件里边存储错误信息,这样,可以容易的修改这些信息。不过,Tomcat中有数以百计的类。把所有类使用的错误信 息存储到一个大的属性文件里边将会容易产生维护的噩梦。为了避免这一情况,Tomcat为每个包都分配一个属性文件。

例如,在包 org.apache.catalina.connector里边的属性文件包含了该包所有的类抛出的所有错误信息。每个属性文件都会被一个 org.apache.catalina.util.StringManager类的实例所处理。当Tomcat运行时,将会有许多 StringManager实例,每个实例会读取包对应的一个属性文件

StringManager是一个单例 (singleton)类
你通过传递一个包名来调用它的公共静态方法 getManager来获得一个实例。每个实例存储在一个以包名为键(key)的Hashtable中。
private static Hashtable managers = new Hashtable();
public synchronized static StringManager getManager(String packageName) {
StringManager mgr = (StringManager)managers.get(packageName);
if (mgr == null) {
mgr = new StringManager(packageName);
managers.put(packageName, mgr);
}
return mgr;
}


应用程序由三个模块组成
connector, startup和core。
startup模块只有一个类,Bootstrap,用来启动应用的。connector模块的类可以分为五组
连接器和它的支撑类(HttpConnector和HttpProcessor)。
? 指代HTTP请求的类(HttpRequest)和它的辅助类。
? 指代HTTP响应的类(HttpResponse)和它的辅助类。
? Facade类(HttpRequestFacade和HttpResponseFacade)。
? Constant类
core模块由两个类组成:ServletProcessor和StaticResourceProcessor。

Runnable接口详解

 

 

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;

  Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的

  run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限,

  下面看例子:

  package org.thread.demo;

  class MyThread extends Thread{

  private String name;

  public MyThread(String name) {

  super();

  this.name = name;

  }

  public void run(){

  for(int i=0;i<10;i++){

  System.out.println("线程开始:"+this.name+",i="+i);

  }

  }

  }

  package org.thread.demo;

  public class ThreadDemo01 {

  public static void main(String[] args) {

  MyThread mt1=new MyThread("线程a");

  MyThread mt2=new MyThread("线程b");

  mt1.run();

  mt2.run();

  }

  }

  但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在JDK的文档中可以发现,一旦调用start()方法,则会通过JVM找到run()方法。下面启动

  start()方法启动线程:

  package org.thread.demo;

  public class ThreadDemo01 {

  public static void main(String[] args) {

  MyThread mt1=new MyThread("线程a");

  MyThread mt2=new MyThread("线程b");

  mt1.start();

  mt2.start();

  }

  };这样程序可以正常完成交互式运行。那么为啥非要使用start();方法启动多线程呢?

  在JDK的安装路径下,src.zip是全部的java源程序,通过此代码找到Thread中的start()方法的定义,可以发现此方法中使用了private native void start0();其中native关键字表示可以调用操作系统的底层函数,那么这样的技术成为JNI技术(java Native Interface)

  ·Runnable接口

  在实际开发中一个多线程的操作很少使用Thread类,而是通过Runnable接口完成。

  public interface Runnable{

  public void run();

  }

  例子:

  package org.runnable.demo;

  class MyThread implements Runnable{

  private String name;

  public MyThread(String name) {

  this.name = name;

  }

  public void run(){

  for(int i=0;i<100;i++){

  System.out.println("线程开始:"+this.name+",i="+i);

  }

  }

  };

 

 

但是在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。此时观察Thread类,有一个构造方法:public Thread(Runnable targer)

  此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多

  线程。(start()可以协调系统的资源):

  package org.runnable.demo;

  import org.runnable.demo.MyThread;

  public class ThreadDemo01 {

  public static void main(String[] args) {

  MyThread mt1=new MyThread("线程a");

  MyThread mt2=new MyThread("线程b");

  new Thread(mt1).start();

  new Thread(mt2).start();

  }

  }

  · 两种实现方式的区别和联系:

  在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比

  继承Thread类有如下好处:

  ->避免点继承的局限,一个类可以继承多个接口。

  ->适合于资源的共享

  以卖票程序为例,通过Thread类完成:

  package org.demo.dff;

  class MyThread extends Thread{

  private int ticket=10;

  public void run(){

  for(int i=0;i<20;i++){

  if(this.ticket>0){

  System.out.println("卖票:ticket"+this.ticket--);

  }

  }

  }

  };

  下面通过三个线程对象,同时卖票:

  package org.demo.dff;

  public class ThreadTicket {

  public static void main(String[] args) {

  MyThread mt1=new MyThread();

  MyThread mt2=new MyThread();

  MyThread mt3=new MyThread();

  mt1.start();//每个线程都各卖了10张,共卖了30张票

  mt2.start();//但实际只有10张票,每个线程都卖自己的票

  mt3.start();//没有达到资源共享

  }

  }

  如果用Runnable就可以实现资源共享,下面看例子:

  package org.demo.runnable;

  class MyThread implements Runnable{

  private int ticket=10;

  public void run(){

  for(int i=0;i<20;i++){

  if(this.ticket>0){

  System.out.println("卖票:ticket"+this.ticket--);

  }

  }

  }

  }

  package org.demo.runnable;

  public class RunnableTicket {

  public static void main(String[] args) {

  MyThread mt=new MyThread();

  new Thread(mt).start();//同一个mt,但是在Thread中就不可以,如果用同一

  new Thread(mt).start();//个实例化对象mt,就会出现异常

  new Thread(mt).start();

  }

  };

  虽然现在程序中有三个线程,但是一共卖了10张票,也就是说使用Runnable实现多线程可以达到资源共享目的。

  Runnable接口和Thread之间的联系:

  public class Thread extends Object implements Runnable

  发现Thread类也是Runnable接口的子类。

 

分享到:
评论

相关推荐

    穆尔传感器与执行器的连接系统 - M8圆头连接器样本.pdf

    穆尔传感器与执行器的连接系统中,M8圆头连接器是一种常见的工业连接解决方案,它在自动化、传感器和执行器技术中扮演着重要角色。M8连接器由于其小型化和易于安装的特性,被广泛应用于控制信号和数据传输,适用于...

    终端连接器终端连接器.rar

    在本压缩包“终端连接器终端连接器.rar”中,我们可能找到了关于这一主题的相关资料,包括“终端连接器”这个核心概念的详细信息。 终端连接器,又称为接口或端口,它的作用是在电子设备、电路板或网络之间建立可靠...

    JVPX系列连接器样本.pdf

    航天JVPX系列加固混装型电连接器是VITA 46总线印制电路连接器的升级版本,其设计目标是为了满足在恶劣的力学与电磁环境下,以及对多种信号类型(差分信号、单端信号、光信号、射频信号、低频信号等)和大功率传输...

    TopFlite Components, Inc. 连接器适配器和附件.pdf

    连接器适配器和附件 #### 概述 TopFlite Components, Inc. 是一家专注于生产高精度连接器适配器与配件的专业制造商。其产品广泛应用于航空、军事及工业领域,满足了客户对于高质量、高性能连接解决方案的需求。该...

    MSSQL连接器.V2.0

    《MSSQL连接器V2.0:深入解析与应用》 MSSQL连接器V2.0是一款专为Microsoft SQL Server设计的数据连接工具,它提供了高效、安全且灵活的接口,使得应用程序能够轻松地与SQL Server进行交互。在本文中,我们将详细...

    IDC PFC KF VH BH CH 连接器各类mm间距 PCB板常用连接器插件3D模型封装库大全(STEP后缀).zip

    IDC牛角座 PFC KF VH BH CH 连接器各类mm间距 PCB板常用连接器插件3D模型封装库大全(STEP后缀): 1.27mmheader.SLDPRT 1.27mmheader2.SLDPRT 1.27mmheader双弯.SLDPRT 1.27mmSMDheader1.SLDPRT 1.27mmSMDheader2....

    连接器手册中文版.doc

    连接器手册中文版是一个专业的连接器技术手册,该手册涵盖了连接器技术的总述、接触接口及接触过程、接触镀层、接触弹片材料、连接器用工程热塑性材料、可别离式电连接器、永久性连接概述、电线与线缆、电线与线缆的...

    电连接器设计手册.docx

    本手册旨在提供电连接器的设计指南,涵盖连接器的总述、接触接口、接触镀层、接触弹片材料、热塑性材料、可别离式电连接器、永久性连接概述、电线与线缆、机械式永久连接、印刷电路板、永久性连接、连接器应用、连接...

    森特奈 7/8"针式、孔式自由组装连接器.zip

    森特奈7/8"针式、孔式自由组装连接器是电子工程中常见的接口组件,主要用于电力或信号传输。这种连接器的设计允许用户根据需求灵活地组装和拆卸,适用于各种工业应用场合。以下是对森特奈7/8"连接器的详细解读: 一...

    航天器用j30jh系列微型矩形电连接器.pdf

    8. 应用:J30JH系列微型矩形电连接器广泛应用于航天器内部的电子设备之间,例如遥测系统、控制系统、数据处理系统等。 在PCB绘制过程中,工程师需要根据电连接器的详细规格书来进行设计。这包括了解连接器的pin脚...

    长江连接器选型目录.zip

    【长江连接器选型目录.zip】是一个包含2018年长江连接器产品目录的压缩文件,主要聚焦在“连接器”这一核心主题上。连接器是电子工程中不可或缺的元件,它在电路中起到桥梁作用,使得电流或信号可以在不同组件之间...

    20210803-申万宏源-从瑞可达看连接器行业新趋势:乘新能源汽车东风,连接器迎行业新机.pdf

    5. 新能源汽车渗透率对市场的驱动作用:据智研咨询数据,2020年中国新能源汽车连接器市场达到47.8亿元,预计未来将继续增长。随着新能源汽车渗透率的提升,预期相关连接器市场也将得到进一步的推动。 6. 通信领域的...

    华伦HLE系列连接器.rar

    华伦HLE系列连接器是电气工程中广泛应用的一种专业组件,主要用于实现电路之间的安全、可靠连接。这个RAR压缩包文件包含了一份详细的“华伦HLE系列连接器”PDF文档,很可能是该产品线的技术手册或用户指南,为使用者...

    快可QC 工业连接器 产品说明书.zip

    8. **定制服务**:为了满足特定应用需求,快可QC提供定制化服务,可以根据客户的要求设计和生产特定规格的连接器。 9. **应用领域**:快可QC的工业连接器广泛应用于能源、自动化、轨道交通、机械工程、航空航天等多...

    SAS4.0连接器资料

    8. 机械性能:为了增加机械强度,连接器采用冲压夹片作为保持器,并在焊后提供额外的机械强度。此外,成型的导向柱有助于确保连接器的两个部分能够通过自对准的方式配合,补偿连接器的不对准。 9. 技术信息:SAS ...

    MySQL jdbc连接器 jdbc.zip

    在描述中提到的"5-8版本的连接器"涵盖了从MySQL 5.0到8.0的主要版本,这些版本的驱动程序支持了不同版本MySQL数据库的特性,包括但不限于新的SQL语法、性能优化以及安全性改进。 JDBC,Java Database Connectivity...

    IEC 61076-8-106-2023 电气和电子设备用连接器.产品要求.第8-106部分:电源连接器.额定电压为400V

    《IEC 61076-8-106-2023:电源连接器的详细解析》 在电气和电子设备的世界里,连接器扮演着至关重要的角色,它们是设备间传递能量和信号的桥梁。国际电工委员会(IEC)制定的标准IEC 61076-8-106-2023,专门针对...

    动力电池高压连接器(单芯)技术规范标准.doc

    8. 高压连接器的互换性设计要求: * 高压连接器的互换性设计要求:高压连接器的互换性设计应满足相关的设计要求,以确保连接器的互换性和可靠性。 9. 动力电池高压连接器检验标准要求: * 动力电池高压连接器检验...

    连接器的设计有关知识.ppt

    《连接器设计详解》 连接器作为电子产品中的关键元件,其设计的重要性不言而喻。在电子连接器设计中,有多个核心要点需要考虑,包括正向力设计、最大应力设计、保持力设计、接触电阻设计、金属材料选择以及应力释放...

    SIBAS连接器选型概述 (2013版).zip

    8. **成本效益**:在满足性能需求的同时,也需要考虑连接器的价格和长期运行的成本。 9. **认证和标准**:连接器应符合相关的行业标准,如IEC、UL、CSA等,确保其质量和安全性。 通过以上这些方面的综合考量,我们...

Global site tag (gtag.js) - Google Analytics