- 浏览: 105508 次
- 性别:
- 来自: 死亡坟墓
-
文章列表
[JCIP]Chapter 1.4 多线程无所不在
- 博客分类:
- 多线程
开发人员并不能因为自己没有创建线程,就可以不关心线程安全问题了。因为多线程是无所不在的。
框架可能会帮你创建线程。JVM会创建线程运行自清理任务(垃圾回收,对象终结),以及运行主程序的线程
Timer会创建线程处理预定义的任务,任务处理需要考虑线程安全问题.
servlet会创建线程池,在这些线程池中运行组件方法。servlet规范要求一个servlet能够被多个线程同时调用,因此servlet需要线程安全。即使servlet只在一个单线程运行,它也需要处理session和context等共享对象问题
RMI会创建额外的线程来运行远程对象中的方法,一个远程对象的方法可能在多个线程中同时执 ...
[JCIP]Chapter 1.3 多线程的风险
- 博客分类:
- 多线程
Java内置的多线程是把双刃剑,一方面: 它提供了语言,库,以及跨平台的内存模型的支持,方便了用户对并发的开发。 另一方面,它降低了多线程开发的难度,导致了开发门槛低,但多线程是个高级话题,需要额外考虑多线程问题 1.3.1 正确性问题 多线程在缺乏充足同步的情况下,它们的运行结果是难以预料的。在没有同步控制下,编译器,硬件,运行过程中都可以对操作进行时间和顺序的改进。 如在寄存器或处理器缓存变量。因为这样做可以提高性能,但这样会破坏安全性 1.3.2 存活性问题 正确性问题在单线程和多线程都会出现,只是多线程会额外引入一些正确性问题。而存活性问题是多线程独有的。 存活性关注的是顺利达到了 ...
[JCIP]Chapter 1.2 多线程的好处
- 博客分类:
- 多线程
如果多线程用的恰当的话,可以减少开发与运营的成本,提高复杂系统的性能。通过多线程将异步的工作流分解成多个顺序工作的单元,从而更符合真实世界的工作交付方式。多线程能够将复杂的代码块分解成 顺序的代码块,从而更容易编写,阅读以及维护.在GUI系统中,多线程能够提高用户响应。在服务器端,多线程能够提高资源利用率和谈吐量。简化JVM的实现,JVM的垃圾回收都是运行在一个或多个预定义的线程中.很多重大Java应用都依赖于一定程度的多线程应用.1.2.1充分利用多处理器1.2.2 更方便建模1.2.3 处理异步事件更加简单1.2.4 提高用户接口的响应速度
最开始: 没有操作系统,电脑一次只能运行一个程序。 后来: 操作系统引入并发,允许同时多个程序运行,每个程序都在各自的进程里运行。 导致操作系统允许同时运行多个程序的因素: 资源利用率;公平性;开发方便. 多个线程共享进程的内存,文件句柄资源。每个线程有自己的程序计数器,栈,局部变量 线程在多处理器中能够更进一步地利用硬件资源。因为在多处理器中,多个线程能够同时运行。 多线程有时被称为"轻量级进程",现代很多操作系统将线程(而不是进程)当作最小的调度单元,在缺少外部的协调下,线程之间是同步或异步执行的。 但多个线程共享了进程的地址空间,进程里的多个线程可以访问同一个变量, ...
从今天开始,翻译Java Concurrency in Practice一书,简称JCIP,主要是为了自己理解,所以主要是翻译个大概意思。。。
所涉及到技术点:
1. Java调用命令行文件:ProcessBuilder类的使用
2. Java注册为操作系统服务,可用apache Daemon的Procrun工具来发布
3. 杀进程:
windows下可以用 WScript 脚本,如下:
Sub Kill_Process(ProcessName, CMD)
For Each ps In getobject("winmgmts:\\.\root\cimv2:win32_process").instances_
if Ucase(ps.name)=Ucase(P ...
开发一个专门的守护项目,主要职责为如下几点:
一. 能够将自己注册为 windows或linux服务
二. 提供配置文件,让用户配置如下参数
# 最长停止时间,单位:秒 (默认 10分钟,如果所有的进程在 10 分钟内没有退出,则执行 kill 命令.)
# 最长启动时间,单位:秒 (默认 10分钟,如果所有的进程在 10 分钟内没有启动,则不再等待)
# 启动顺序(停止顺序按照倒顺,用空格分开,如果不想监控某程序,可以从列表中去掉)
# 显示名称
...
J2EE项目都需要部署在J2EE容器内,所以上生产的时候,一般都会提供启动(startup.bat) 和 停止(stop.bat)的命令行脚本文件来部署。但不能满足以下情形:
1. 如果操作系统因意外重启了,怎么办
2. 运行过程中,进程crash掉了怎么办?
以上2种情况出现,都需要人工再去手工点startup.bat文件,来重新启动,人工会有延迟的,如果系统能够检测到这些异常,并自动处理掉,主要实现如下:
1.开发项目的startup和stop的命令行脚本文件,以及必要的kill脚本
2.项目将一些核心服务用http暴露出来,用于标示服务在正常运行
3.整理该项 ...
好的代码必备的特点-业务结构清晰
- 博客分类:
- 最佳开发实践
看别人代码的时候,常常会遇到这样的问题, 好像代码中没有实现这个小功能,但一打包运行,这小功能确实已经有了。
翻遍了所有业务实现代码,都没找到,最后发现这个小功能在一个工具类方法实现了,我估计你已经抓狂了。。。
所以在开发项目过程中,所有业务类型功能代码都应该放在业务代码里,而不应该图方便将其放在不应该的地方。这样给维护会带来很大的困难。 工具类方法就只是做工具用的,不应该涉及任何业务代码.
利用xslt模板进行合并
/*
* 合并xml文件
*/
public void testMerge() throws Exception{
String aa = "F:/workspace/bme/mystudy/uconfig/11.xml";
String bb = "F:/workspace/bme/mystudy/uconfig/22.xml";
System.out.println(XmlUtil.DOM2String(mergeDocumentByXslt(getDocumentByUrl(a ...
有钱就泡泡妞
没钱就跑跑步
介于两者之间就购购物
有能力就去国外
没能力就低调的在国内,不要看新闻,不要看政策,不要想着会有什么福利。
介于两者之间就在国内搞搞小爱好,但一定要低调,千万不要惹比你有钱的人。
爱护自己,好好活着,低调活着,用旁人的眼观看时代变迁!
Java获取mac地址
- 博客分类:
- 综合技术
public static Map getLocalMacMap()
throws SocketException
{
Map macs = new HashMap();
for(Enumeration networks = NetworkInterface.getNetworkInterfaces(); networks.hasMoreElements();)
{
NetworkInterface ni = (NetworkInterface)networks.nextEleme ...
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" s ...
3.6 其他
规则4.7.4:使用.innerHtml时,如果只是要显示文本内容,必须在innerHTML取得内容后,再用正则表达式去除HTML标签,以预防跨站脚本。
说明:使用.innerHtml会将内容以HTML显示,容易被利用,导致跨站脚本。
实施指导:
<a href="javascript:alert(document.getElementById('test').innerHTML.replace(/<.+?>/gim,''))">无HTML,符合W3C标准</a>
备注:还可以使用.innerText代替. ...
3.4 代码注释
3.5 归档要求
规则4.6.1:版本归档时,必须删除开发过程(包括现场定制)中的临时文件、备份文件、无用目录等。
说明:恶意用户可以通过URL请求诸如.bak之类的文件,Web服务器会将这些文件以文本方式呈现给恶意用户,造成代码的泄漏,严重威胁Web应用的安全。
实施指导:
请务必删除如下一些后辍的文件:
.old、.OLD、.bak、.BAK、.temp、.save、.backup、.orig、.000、~、~1、.dwt、.tpl
规则4.6.2:归档的页面程序文件的扩展名必须使用小写字母。
说明:很多Web server对大小写是敏感 ...