« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
|
|
[Java编程]Java Thread(2) |
大隐于市 发表于 2005/6/1 9:36:14 |
从第一篇文章,我们发现在Java中生成线程是一件很simple的事情,但是我们应该尽量避免生成Thread。在比较简单的情况下问题还不明显,不过MultiThread程序的确存在着如下缺点:
减慢初始启动速度: 生成和启动Thread在一些平台上是比较低速的操作,在性能关键的程序中,这是个很大的缺点。但是我们可以使用Thread Pool来解决这个问题,后面应该会有涉及。
资源的使用: 每个Thread都要分配自己的堆栈,堆栈就是包含本地变量值和其他执行相关信息的存储区域;除了堆栈,还要占用其他系统资源,并且有些平台限制可以生成的Thread数量,即使不存在这样的限制,由于系统的CPU和内存性能和容量有限,还是不能任意的产生Thread,这个问题可以通过Thread Pool来折衷解决。
增加了程序的复杂性: 使用MultiThread的最大缺点是增加了程序的复杂性,使其控制起来更加困难。Thread的安全性通常要求将对象设计成一个Thread修改数据时,另一个Thread无法read或者writ | |
|
[Java编程]Java Thread(1) |
大隐于市 发表于 2005/6/1 8:55:32 |
Java内置支持MultiThread程序,不像C语言里的Thread需要操作系统的支持,实际上,Java虚拟机相当于在OS上又跑了一个OS。 每个Thread表示为java.lang.Thread类的一个实例。要生成新的实例,只要定义一个类扩展Thread类或者实现java.lang.Runnable接口的类。我们通常要生产在自己线程中运行代码的类,但是如果这个类扩展Thread,则无法继承任何其他类的功能,因为Java本身不支持多继承模式。实际上,扩展Thread比起实现Runnable没有任何性能上的优势,两者方法难度相当,因此我们通常选择实现Runnable接口的方式来创建线程。
在Runnable中定义的唯一方法就是run()在线程执行时调用。线程退出run()之后(正常退出或由于未捕获异常),就已经退出,无法重新启动或者复用。
在效果上,线程的run()方法就如同程序的main()方法:都是代码的处驶入口点。和main()方法一样,通常不能显式的调用run()方法,而是将Runnable实例传入Thread的构造函数,线程启动时会 | |
|
[Java编程]JDBC的单例模式 |
大隐于市 发表于 2005/5/26 10:11:48 |
动态Web站点往往用数据库存储的信息生成Web页面,每一个页面请求导致一次数据库访问。连接数据库不仅要开销一定的通讯和内存资源,还必须完成用户验证、安全上下文配置这类任务,因而往往成为最为耗时的操作。 尤其是Oracle数据库,建立一次connection所要消耗的时间是人眼可见的。如果某个基于数据库的Web应用只需建立一次初始连接,不同页面请求能够共享同一连接,就能获得显著的性能改善。 Servlet是一个Java类。Servlet引擎(它可能是Web服务软件的一部分,也可能是一个独立的附加模块)在系统启动或Servlet第一次被请求时将该类装入Java虚拟机并创建它的一个实例。不同用户请求由同一Servlet实例的多个独立线程处理。那些要求在不同请求之间持续有效的数据既可以用Servlet的实例变量来保存,也可以保存在独立的辅助对象中。 用JDBC访问数据库首先要创建与数据库之间的连接,获得一个连接对象(Connection),由连接对象提供执行SQL语句的方法。
| |
|
« 1 › |
|
统计 |
blog名称:若望的天地 日志总数:30 评论数量:60 留言数量:0 访问次数:152282 建立时间:2005年5月25日 | |