- 浏览: 827959 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
renzhengzhi:
请教一下楼主,公有云和私有云的开发,具体要做哪些工作呢?我拿到 ...
4,云的4 种模式 -
SangBillLee:
我用了solr5.5,用SolrQuery查询,没法高亮,不知 ...
solr5.x快速入门 -
lw900925:
这翻译读起来真是别扭。
solr in action翻译-第一章1.1 -
springjpa_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Spring MVC性能提升 -
h416373073:
正遇到了此问题不知如何解决, 多谢分享
solr错误
一个可以创建更好的请求和响应对象的连接器,
一个符合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接口的子类。
发表评论
-
21,tomcat关闭钩子
2012-11-22 20:35 6596在很多环境下,在关闭应用程序的时候需要做一些清理工作。问题在于 ... -
20,tomcat的XML解析---digester
2012-11-22 20:07 1524tomcat使用server.xml配置属性信息Tomcat使 ... -
19tomcat的服务器和服务
2012-11-20 20:10 1047Server服务器 Server接口表示整个Catalina ... -
18,tomcat的主机(host)和引擎
2012-11-16 09:13 2318如果需要在一个Tomcat部署中部署多个上下文,需要使用一个主 ... -
附,listener、 filter、servlet 加载顺序及其详解
2012-11-15 09:10 964一、 1、启动一个WEB项 ... -
17,tomcat中StandardContext
2012-11-15 08:59 5005一个上下文容器(Context)代表一个web应用,每一个上下 ... -
16,tomcat中StandardWrapper实现
2012-11-14 18:28 3839Wrapper接口在Catalina中的标准实现Standar ... -
15,tomcat安全
2012-11-14 09:02 1174有些web应用程序的内容是有限制的,只允许有权限的用户在提供正 ... -
14,tomcat session管理
2012-11-14 09:01 1073Catalina通过一个叫管理器的组建来完成Session的管 ... -
13.tomcat加载器
2012-11-13 13:21 1355库(repository)和源(res ... -
12,tomcat日志处理
2012-11-13 13:15 1224日志系统是一个记录信息的组件。在Catalina中,日志系统是 ... -
附:JAVA事件处理--观察者模式
2012-11-12 10:33 960简单地说,观察者模式 ... -
11.tomcat生命周期
2012-11-12 10:26 973Catalina由多个组件组成,当Catalina启动的 ... -
10.容器
2012-11-12 10:12 1331容器是一个处理用户servlet请求并返回对象给we ... -
9.Tomcat的默认连接器
2012-11-12 08:52 1149Tomcat连接器是一个可以插入servlet容器的独立模块, ... -
7,Facade外观模式
2012-11-08 11:28 925外观模式:为子系统中的一组接口提供了一个一致的界面,此模式定义 ... -
6,一个简单的servlet容器
2012-11-08 11:10 825总的来说,一个全功能的servlet容器会为servlet的每 ... -
5.javax.servlet.Servlet接口
2012-11-08 09:18 924javax.servlet.Servlet接口Servlet编 ... -
4,一个简单的tomcat
2012-11-07 18:10 881流程图如下 -
3.ServerSocket 与 Socket的区别
2012-11-07 16:56 11041.1 ServerSocket类创建 ...
相关推荐
IDC牛角座 PFC KF VH BH CH 连接器各类mm间距 PCB板常用连接器插件3D模型封装库大全(STEP后缀): 1.27mmheader.SLDPRT 1.27mmheader2.SLDPRT 1.27mmheader双弯.SLDPRT 1.27mmSMDheader1.SLDPRT 1.27mmSMDheader2....
穆尔传感器与执行器的连接系统 - M8圆头连接器样本pdf,穆尔传感器与执行器的连接系统 - M8圆头连接器样本
航天JVPX加固混装连接器的规格书,里面有详细的命名规则,PIN脚分配,安装孔位置,接插件大小的等信息,方便PCB选材
TE Connectivity (TE) 推出的 M8/M12 连接器系统适用于工业自动化设备及控制应用,其提供的解决方案可确保工业环境中的通信安全、可靠。该连接器系统按照国际标准 IEC (IEC 61076-2-101 / -104 / -109) 设计,除了...
本文主要讲述电源连接器产品快速选型,TE可根据客户要求可提供附加热灯丝兼容型连接器。
5-8版本的连接器
森特奈 7/8"针式、孔式自由组装连接器zip,文档介绍SENTINEL-森特奈 7/8"针式、孔式自由组装连接器的型号,订货号,技术数据参数等内容。
航天693厂电子样本(高频连接器—第二分册)
ftp连接器8uftp,ftp上传下载,方便上传文件与下载文件
5. 插拔力:尽量选用拔出力为13N以上连接器,低于4PIN连接器(3PIN 、2PIN、1PIN)拔出力可为8N以上。否则有必要使用特别工艺处理,增强其可靠性。但拔出力不可太大,总拔出力超过50N时,用人工插拔已经相当困难了...
易语言连接器v6v7v8v9v10v12v13v15v17全版本, 解压缩 linker.rar到易语言安装根目录下,拷贝全版本连接器到易语言安装恨目录运行并选择编译连接器,一键配置。各连接器对的应微软运行库,需自行网络下载。v17版本...
GBase8s CM连接管理器简介
松下基板对基板用窄间距连接器P8系列(0.8mm间距)样本pdf,特点:组合高度为3.0mm.3.5mm.4.0mm.4.5mm.5.0mm.5.5mm.6.0mm.7.0mm.8.0mm.11.5mm.13.0mm.14.0mm;11.5mm型中插座和插头形状相同;通过采用波纹型触点构造,...
多服务器远程桌面连接器支持多窗口,操作简单,主要功能是作为windows远程桌面连接器。 多服务器远程桌面连接器功能介绍 1、支持windows远程桌面,ssh登陆,telnet登陆 2、支持服务器(设备)信息加密保存, 3、...
IEC 61076-8-106-2023 电气和电子设备用连接器.产品要求.第8-106部分:电源连接器.额定电压为400V
穆尔电子的M8连接器pdf,我们M8的重新设计相当于一次创新。我们完全重新设计了穆尔电子所有塑模的M8连接器。并且,这些连接器有一个新颖的,现代化的外观来匹配它们内部升级的功能。
能够实现批量管理和自动连接功能,方便实用! 金山火眼报告: http://fireeye.ijinshan.com/analyse.html?md5=68a2362abbf8fba702a64a53cb396ffe&sha1=fb5002afcddb55356094773a00dc0912dd77c843&type=1
瑞萨单片机仿真器E8A,管脚分配图。瑞萨单片机开发板用到
常见AD连接器封装。常见AD封装常见AD封装常见AD封装常见AD封装常见AD封装常见AD封装常见AD封装
穆尔传感器与执行器的连接系统 - 7_8 inchs连接器样本pdf,穆尔传感器与执行器的连接系统 - 7_8 inchs连接器样本