- 博客(8)
- 资源 (9)
- 收藏
- 关注
原创 Java: 使用信号量(Semaphore)保护多个共享资源的访问
信号量(semaphore)机制是一种常用的同步机制,在现代OS中被广泛采用。semaphore是一个非0值,当它的值大于0时表示系统目前还有足够的资源分配给请求线程,每分配出去一个资源,值递减。当值等于0时表示当前已无资源可分配。JDK提供了Semaphore类来实现信号量。假如我们一共有3台打印机可用,当前有N个线程都请求使用打印机,要实现对打印机这种资源的访问保护,有以下两种方式:每当一个线
2015-03-26 11:36:00 2994
原创 基于JMS消息中间件的分布式系统初探究(二) - 服务端反射调用组件方法
在上一篇文章中,我们解决了子系统之间的通讯问题,并跑起来了一个模型项目。这里我们要详细实现服务端程序。我们在服务端运行Spring,利用Spring的IoC容器来管理所有的Service组件,然后根据接收到的JMS消息通过反射动态调用Service方法。首先要先设计一下协议:public class MessageProtocol implements Serializable { /**
2015-03-25 02:46:02 2087
原创 基于JMS消息中间件的分布式系统初探究(一) - 通过JMS实现Web服务器与服务框架的通讯
在一个大型网站中,如果要把整个业务拆分成N个子业务,每个业务单独部署到一台服务器上,那么需要解决的问题有:自身的部署。是部署到JavaEE容器中随容器启动,还是做为一个standalone程序单独启动?子系统如何暴露服务接口(如何与其它系统进行通讯)。服务请求者直接通过Socket直连,还是通过Web Service, RMI等技术?这里我们尝试通过standalone方式部署,通过JMS中间
2015-03-24 00:47:48 3079
原创 Java最大的优势真的在于跨平台吗?
以前是,但现在已经不是了。有跨平台需求的仅仅是客户端应用,而不是服务端。例如桌面应用,你的客户可能是Windows用户,也可能是Linux用户,这时候如果不想多投入成本对各个平台进行适配,那么Java所谓的”Write once, run everywhere”就显得异常光彩。然而今天,整个软件世界都在向B/S应用倾倒(嵌入式除外),即使要做客户端跨平台,QT等第三方框架远远比Swing更强大,Ja
2015-03-18 07:50:32 2347
原创 利用广度优先遍历(BFS)计算最短路径 - Java实现
我们用字符串代表图的顶点(vertax),来模拟学校中Classroom, Square, Toilet, Canteen, South Gate, North Gate几个地点,然后计算任意两点之间的最短路径。 如,我想从North Gate去Canteen, 程序的输出结果应为: BFS: From [North Gate] to [Canteen]: North Gate
2015-03-15 02:46:54 10763
原创 SpringMVC: web.xml中声明DispatcherServlet时一定要添加load-on-startup标签
游历SpringMVC源码后发现,在web.xml中注册的ContextLoaderListener监听器只是初始化了一个根上下文,仅仅完成了组件扫描和与容器初始化相关的一些工作,并没有探测到具体每个URL应当map到哪个Controller, 哪个方法上。而剩一下的这些复杂工作都是由DispatcherServet来完成的,即应用服务器加载DispatcherServlet调用init()方法时才
2015-03-12 20:58:38 3547 1
原创 Spring源码分析: SpringMVC启动流程与DispatcherServlet请求处理流程
Spring版本: 4.0.X 注:这里的分析只关注整个处理流程的大致过程,省略与流程无关的代码。应用根上下文(Root ApplicationContext)的启动在一个web项目中使用SpringMVC时,需在web.xml中配置一个监听器:<listener> <listener-class>org.springframework.web.context.ContextLoa
2015-03-11 23:54:20 3214
原创 总结在使用JPA时需要注意的几点
在调用persist(entity)方法之前,一定要保证entity所有的非集合类成员都已经被正确地赋值。在@OneToMany关系中,如果要删除many端(主动端)的实体,必须先从one端(被动端)的集合类中移除该实体,然后再调用remove(entity)方法才能删除成功。在@OneToMany关系中,未设置级联删除的情况下,如果要删除one端(被动端)实体,则必须先删除one端集合类中所有
2015-03-09 15:13:07 2013
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人