Feb 11
贴在我们多线程 Java 编程论坛上最常见的问题之一是“怎样创建线程池?”。几乎在每个服务器应用程序中都会出现线程池和工作队列问题。本文中,Brian Goetz 探讨了线程池的动机、一些基本实现和调优技术以及一些要避免的常见危险。
为什么要用线程池?
诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。请求以某种方式到达服务器,这种方式可能是通过网络协议(例如 HTTP、FTP 或 POP)、通过 JMS 队列或者可能通过轮询数据库。不管请求如何到达,服务器应用程序中经常出现的情况是:单个任务处理的时间很短而请求的数目却是巨大的。
构建服务器应用程序的一个过于简单的模型应该是:每当一个请求到达就创建一个新线程,然后在新线程中为请求服务。实际上,对于原型开发这种方法工作得很好,但如果试图部署以这种方式运行的服务器应用程序,那么这种方法的严重不足就很明显。每个请求对应一个线程(thread-per-request)方法的不足之一是:为每个请求创建一个新线程的开销很大;为每个请求创建新线程的服务器在创建和销毁线程上花费的时间和消耗的系统资源要比花在处理实际的用户请求的时间和资源更多。
除了创建和销毁线程的开销之外,活动的线程也消耗系统资源。在一个 JVM 里创建太多的线程可能会导致系统由于过度消耗内存而用完内存或“切换过度”。为了防止资源不足,服务器应用程序需要一些办法来限制任何给定时刻处理的请求数目。
线程池为线程生命周期开销问题和资源不足问题提供了解决方案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。其好处是,因为在请求到达时线程已经存在,所以无意中也消除了线程创建所带来的延迟。这样,就可以立即为请求服务,使应用程序响应更快。而且,通过适当地调整线程池中的线程数目,也就是当请求的数目超过某个阈值时,就强制其它任何新到的请求一直等待,直到获得一个线程来处理为止,从而可以防止资源不足。更多…. Continue reading »
Feb 07
对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户端是否安装有jre、jre版本问题、jre去哪下载、如何用jre启动你的Java应用?不要说刚接触电脑的人,就算是比较熟悉电脑,如果没有接触过Java,面对一个Java应用,如何在Windows下启动它,估计都会折腾半天。如果不是因为这个问题,Java在我的眼里算是最完美的语言了,也是我最喜爱的语言。
所以我认为这个是导致Java桌面应用被一些人所讨厌的最大原因,Java的优势是“一次编写,随处运行”,跨平台特性确实很好,但并不是每个人都需要或都想要跨平台,而且有时候JVM平台或版本问题也会造成“一次编写,到处测试”的尴尬。
最好的方式莫过于带着JRE,让用户轻松点击就能运行。下面我们来解决这样的问题,有什么好的建议或方法请其他朋友多多指教或补充!更多…. Continue reading »
Feb 07
首先,将编译好的程序打包成jar文件,然后做出exe,这样代码就不可见了;但是exe文件在没有安装jre的电脑上不能运行,如果要求客户再去安装jre 设置环境变量 就不雅了。我们需要将jre打包。
这几步操作网上介绍的插件和方法很多,但有的好用有的不好用,而且有的还需要注册。经过尝试比较,在“千里冰封”的博客上得到了很大的帮助。整理一下。使用这几个工具,您也可以顺利的发布您的java程序!更多… Continue reading »
Feb 03
一会是文件的编码,一会是数据库乱码,还有汉字的乱码。感觉有时候是乱码,而有时候又不是。
现在总结一下就是:文件本身的编码和网页内容的编码一致
1、如果文件保存的UTF-8格式。
在PHP中: header(’Content-Type:text/html;charset=utf-8′);//避免输出乱码
在HTML中:<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
数据库读取部分:mysql_query(”set names utf8″);
2、如果文件是(gb2312)ANSI格式,相应的地方都换成gb2312
以上基本上可解决乱码问题。
Feb 02
function copyArray(_obj:Array):Array {
var _bytesarray:ByteArray =new ByteArray;
_bytesarray.writeObject(_obj);
_bytesarray.position =0;
return _bytesarray.readObject();
}
var obj:Array = new Array(”1″, “2″, “3″);
var obj2:Array =copyArray(obj);
trace(obj2);
Feb 01
我的即时通讯软件的一个版本是用js来包装窗口的,具体就是:
好友列表是js窗口,聊天窗口是个js窗口,填加好友是个js窗口等等.
如此,那么一个页面中就需要加载多个swf,而通过aswing生成的swf都很大(400K以上),所有的swf大小在2M以上.对于web软件来说,加载的时间过长.
后来我进行了优化,先做个swf Lib,这个lib存放有其它的swf用到的类库,而其余的Swf不再导入aswing Lib,通过提取Swf Lib中的Class生成.
这样做的好处有:
1\由于其它的swf没导入aswing类库,生成体积大为减小.
2\其中一个swf加载swf Lib后,这个swf Lib会存在缓存中,另一个swf 会从缓存中加载swf Lib,瞬间可完成,不需要去服务器远程请求.