- 浏览: 282602 次
- 性别:
- 来自: 厦门
文章分类
最新评论
-
chenxliang:
2016年10月26、27日,上海浦东,Postgres中国用 ...
用JDBC连接Postgres(Postgres学习笔记1) -
cuiran:
不错,讲的很详细。
web.xml 中的listener、 filter、servlet 加载顺序及其详解 -
i_am_birdman:
PostgreSQL的管理启动服务pg_ctl -D /pat ...
PostgreSql 数据库备份恢复 删除 建立 -
i_am_birdman:
songshuang 写道现在觉悟也不晚!加油!
加油呵呵
人生规划啊 -
songshuang:
现在觉悟也不晚!加油!
人生规划啊
JSP默认是以多线程方式执行的,这是JSP与ASP,PHP,PERL等脚本语言不一样的地方,也是它的优势之一,但如果不注意多线程中的同步问题,会使所写的JSP程序有难以发现的错误。下面以一个例子说明JSP中的多线程问题及解决方法。
一、JSP的中存在的多线程问题:
当客户端第一次请求某一个JSP文件时,服务端把该JSP编译成一个CLASS文件,并创建一个该类的实例,然后创建一个 线程处理CLIENT端的请求。如果有多个客户端同时请求该JSP文件,则服务端会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可大大降 低对系统的资源需求,提高系统的并发量及响应时间.对JSP中可能用的的变量说明如下:
- 实例变量
实例变量是在堆中分配的,并被属于该实例的所有线程共享,所以不是线程安全的. - JSP系统提供的8个类变量
JSP中用到的OUT,REQUEST,RESPONSE,SESSION,CONFIG,PAGE,PAGECONXT是线程安全的,APPLICATION在整个系统内被使用,所以不是线程安全的. - 局部变量
局部变量在堆栈中分配,因为每个线程都有它自己的堆栈空间,所以是线程安全的. - 静态类
静态类不用被实例化,就可直接使用,也不是线程安全的. - 外部资源:
在程序中可能会有多个线程或进程同时操作同一个资源(如:多个线程或进程同时对一个文件进行写操作).此时也要注意同步问题.
二、下面的例子存在的多线程问题:
<%@ page import="
javax.naming.*,
java.util.*,
java.sql.*,
weblogic.common.*
" %>
<%
String name
String product;
long quantity;
name=request.getParameter("name");
product=request.getParameter("product");
quantity=request.getParameter("quantity"); /*(1)*/
savebuy();
%>
<%!
public void savebuy()
{
/*进行数据库操作,把数据保存到表中*/
try {
Properties props = new Properties();
props.put("user","scott");
props.put("password","tiger");
props.put("server","DEMO");
Driver myDriver = (Driver) iver").newInstance();
conn = myDriver.connect("jdbc:weblogic:oracle", props);
stmt = conn.createStatement();
String inssql = "insert into buy(empid, name, dept) values (?, ?, ?,?)";
stmt = conn.prepareStatement(inssql);
stmt.setString(1, name);
stmt.setString(2, procuct);
stmt.setInt(3, quantity);
stmt.execute();
}
catch (Exception e)
{
System.out.println("SQLException was thrown: " + e.getMessage());
}
finally //close connections and {
try {
if(stmt != null)
stmt.close();
if(conn != null)
conn.close();
} catch (SQLException sqle) {
System.out.println("SQLException was thrown: " + sqle.getMessage());
}
}
}
%>
三、解决方法
- 采用单线程方式
在该JSP文件中加上: ,使它以单线程方式执行,这时,仍然只有一个实例,所有客户端的请求以串行方 式执行。这样会降低系统的性能. - 对函数savebuy()加synchronized进行线程同步,该JSP仍然以多线程方式执行,但也会降低系统的性能
public synchronized void savebuy()
{
......
} - 采用局部变量代替实例变量,函数savebuy()声明如下:
因为在savebuy()中使用的是传给他的形参,是在堆栈中分配的,所以是线程安全的.
public void savebuy(String name,String product, int quantity)
{
......
}
调用方式改为:
<%
String name
String product;
long quantity;name=request.getParameter("name");
product=request.getParameter("product");
quantity=request.getParameter("quantity");
savebuy(name,product,quantity)
%>如果savebuy的参数很多,或这些数据要在很多地方用到,也可声明一个类,并用他做参数,如:
public class buyinfo
{
String name;
String product;
long quantity;
}public void savebuy(buyinfo info)
{
......
}调用方式改为:
<%
buyinfo userbuy = new buyinfo();userbuy.name=request.getParameter("name");
userbuy.product=request.getParameter("product");
userbuy.quantity=request.getParameter("quantity");
savebuy(userbuy);
%>
所以最好是用3,因为1,2会降低系统的性能.
多线程问题一般只有在在大并发量访问时,才有可能出现,并且很难重复出现,所以应在编程时就时刻注意。
发表评论
-
JSTL
2015-03-18 10:01 0<td width="20%" al ... -
struts-bean.tld,struts-html.tld,struts-logic.tld 这几个东西是干什么用的?
2013-08-02 10:51 873struts-html标签库。这个库可以被用来生成动态HTML ... -
2011_11_14(svn提交失败,唯一约束)
2011-11-14 16:43 11251) ALTER TABLE stat.stat ... -
开发中备忘
2011-08-02 15:50 834之前版本用数组处理,现在为了赶进度,仍然用list转换为数组传 ... -
xml文档
2011-07-31 11:51 638用dom4j处理时,当一个节点是空时,显示为<***** ... -
《重构》读书笔记
2011-07-24 16:01 832如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便 ... -
state模式
2011-06-20 21:02 793待续。。。。。 -
javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
2011-06-19 21:12 4141问题: HTTP ERROR 500 Problem ac ... -
Deployment failure on Tomcat 6.x. Could not copy all resources to
2011-06-19 10:15 1224Deployment failure on Tomcat 6. ... -
Resin Configuration summary:And Resin make install 's output
2011-05-09 16:08 1250./configure --prefix=/usr/l ... -
最近松懈了。。。
2011-05-04 22:53 699最近因为没什么活,整个人一下松懈了,不应该放这么多的时间在没用 ... -
最近两天总结
2011-03-18 23:14 9431.openOffice,一个挺牛逼的软件,不过现在是orac ... -
关于最近项目生活的体会
2011-03-14 18:58 8381.学习了聚合函数array_accum的运用,http:// ... -
junit 4 中的Before After Ignore Test BeforeClass AfterClass
2011-01-21 20:26 1630JUnit 4 使用 Java 5 中的注解(annota ... -
Junit 4
2011-01-11 18:57 1158近期写单元测试计划,公司准备把junit3.8升级到jun ... -
HIBERNATE 文档
2010-12-14 10:48 986找了一些关于Hibernate的资料,发现还是官网的最好... ... -
FCKEditor: Remove & prevent <p> tags from wrapping your content
2010-12-11 17:25 1109For some reason, FCKEditor ... -
difference between request.getParameter() and request.getAttribute()
2010-12-08 13:50 850What is the difference between ... -
session详解 -转(作者:郎云鹏)
2010-12-07 13:42 951目录: 一、术语sess ... -
获得网页来访者IP;操作系统版本;浏览器版本
2010-12-05 14:34 3715一,获得网页来访者IP ...
相关推荐
jsp多线程学习教程源码,有兴趣的看看啊,不足的地方还见谅啊
【标题】"jsp写的多线程下载 源代码"主要涉及的是在Java服务器页面(JSP)中实现多线程技术来优化大文件下载的效率。多线程下载是通过将一个大文件分割成多个小部分,然后同时启动多个线程分别下载这些部分,以提高...
Java多线程程序设计是Java开发中的重要概念,它允许在一个程序中同时执行多个任务,提高了应用程序的效率和响应性。在Java中,有两种主要的方式来实现多线程:继承Thread类和实现Runnable接口。 首先,我们要理解多...
本项目"JSP进度条使用线程制作"正是为了解决这个问题,它展示了如何通过多线程技术在JSP中实现一个动态更新的进度条。 首先,我们需要理解线程的概念。在Java中,线程是程序执行的最小单元,每个线程都有自己的程序...
9. **JSP内置对象与线程安全**:JSP的内置对象(如`session`, `request`, `response`)不是线程安全的,因此在多线程环境下使用它们时,需格外小心。 10. **设计模式**:如单例模式用于保证一个类只有一个实例,...
标题中的"vc源码,多线程示例"表明这是一个关于使用Visual C++(简称VC)进行多线程编程的源代码示例。在Windows环境下,VC是Microsoft开发的一个集成开发环境,它支持C++语言,可以用于创建各种类型的Windows应用...
Python多线程超大日志文件解析转储,实现几十G超大文件并发处理。 实现功能如下: 1.多线程分块解析某超大日志文件,实现超大文件多线程分块处理 2.多线程写入数据到数据库postgresql/mysql 3.线程之间通过队列queue...
在IT行业中,多线程和图片下载是两个关键的技术领域,尤其在Web开发中,如JSP(JavaServer Pages)应用程序。"多线程双图片源下载jsp"这个实例展示了如何利用多线程技术从Google和Flickr这两个知名的图片服务平台上...
由于Servlet本质是多线程的,因此JSP天生支持多线程操作。在处理并发请求时,JSP和其背后的Servlet容器(如Tomcat)会利用多线程来提高性能。 2. **Servlet**:Servlet是Java编写的小型服务器端程序,用于扩展...
socket长连接多线程支持客户端服务端互发消息 运行多个TUClient在控制台输入消息 消息格式如下:TA CM 114 :54089999000100000004|12|201002031029; 54089999000100000004代表客户端标识,每登录成功一个客户端将在...
它基于Servlet和JSP规范,对于处理HTTP请求,Tomcat采用了多线程模型来提升性能。在这个主题中,我们将深入探讨"Tomcat中多线程对于Servlet处理"的相关知识点,特别关注在5.5.17版本中的实现。 1. **Tomcat的线程...
5. **JSP中的多线程**:在Java Server Pages(JSP)中,虽然JSP本身不是多线程的,但它们运行在Servlet容器中,而Servlets是多线程的。每个HTTP请求都会在单独的线程中处理,因此理解如何在Servlet中正确地管理线程...
对于大量文件上传,可能需要考虑分块上传、多线程处理等策略,以提高上传效率。 10. **前端验证**: 在客户端进行初步验证,如限制文件数量、大小等,可以减少无效的服务器请求。 总的来说,JSP多文件上传涉及...
在JSP(Java Server Pages)开发中,理解并处理多线程问题是至关重要的,因为这直接影响到程序的正确性和性能。JSP默认是以多线程的方式执行,这意味着多个客户端请求同一JSP页面时,服务器会为每个请求创建一个新的...
理解JSP引擎的工作原理及其关键技术,如JSP页面的转换与编译机制、多线程与持久性等,对于成为一名优秀的JSP开发者至关重要。掌握这些核心概念不仅可以帮助开发者写出更高效、可靠的代码,还能更好地应对复杂的Web...
在IT领域,多线程文件下载是一种常见的优化技术,它能显著提高大文件的下载速度。这个项目专注于利用多线程技术实现文件的高效下载,同时支持断点续传功能,确保用户即使在网络不稳定的情况下也能顺利完成下载。接...
1. **多线程**:在JSP应用中,多线程是必不可少的一部分。多线程允许多个任务同时执行,提高服务器性能。在`多线程.doc`中,可能讲解了如何在JSP中创建和管理线程,以及线程同步和通信的方法,如synchronized关键字...
人工智能-项目实践-多线程-多线程网站目录穷举扫描修改版 使用方法 python dirfuzz.py www.wooyun.org php python dirfuzz.py www.wooyun.org asp python dirfuzz.py www.wooyun.org jsp
在JavaEE的学习过程中,多线程是不可或缺的一部分,尤其对于服务器端应用来说,多线程能够有效地利用系统资源,提高程序的并发处理能力。 多线程是Java编程中的核心概念,它允许一个程序同时执行多个任务。在Java中...