摘要: 在 JAVA 中 ExecutorService 通常用来代替 Thread.class 来执行多线程。其中 invokeAny() 和 invokeAll() 两个 function 是导致主线程等待。invokeAny() 线程集里的任何一个结束就结束而 invokeAll() 是所有线程结束才 阅读全文
posted @ 2017-05-03 08:25 sleepyface 阅读(125) 评论(0) 推荐(0) 编辑
摘要: SerialVersionUID 此link讲得非常好:http://www.mkyong.com/java-best-practices/understand-the-serialversionuid/ 总的来说,就是为了确保class的兼容性。假设存档里的object被存成file,然后软件进行 阅读全文
posted @ 2016-05-31 08:19 sleepyface 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 单例 (Singleton) 是可以同时被多个threads运用的,他们同时引用实例,调用里面的function都是可以的。但是要注意对实例变量的多线程问题。 ConcurrentHashMap 是线程安全的,它的写操作只能同时被一个线程操作,但是读操作并没有synchronize,所以如果一个线程 阅读全文
posted @ 2016-03-13 13:30 sleepyface 阅读(741) 评论(0) 推荐(0) 编辑
摘要: DataSource 在J2EE的实现是pooling,getConnection() 和 close() 都是logical的,并没有physically 连接或关闭。 Statement 不能设置参数,易造成sql injection。多用于一次性的query。 PreparedStatemen 阅读全文
posted @ 2016-02-20 01:27 sleepyface 阅读(133) 评论(0) 推荐(0) 编辑
摘要: Select ... lock in share mode 可以让被读的行只能被读,不能被修改,直到commit。 Select ... for update 可以让被读的行既不能被读也不能被修改,直到commit。 阅读全文
posted @ 2016-02-02 11:44 sleepyface 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 在EJB3中,所有bean的default Transaction Mangement Type 都是Container,不论有还是没有 @TransactionManagement。同样,所有method的default attribute都是REQUIRED,不论有没有@TransactionA 阅读全文
posted @ 2016-01-28 04:08 sleepyface 阅读(430) 评论(0) 推荐(0) 编辑
摘要: JMS, JDBC 提供的都是interface,具体的实现得要用provider。例如ojdbc6.jar就是对JDBC Interface的实现,还有application server里有专门对JMS的实现。Interface和Class区分开来的好处就在于,用interface的人只管用就行 阅读全文
posted @ 2016-01-27 23:17 sleepyface 阅读(207) 评论(0) 推荐(0) 编辑
摘要: Stateless 每次method call都会从pool里拿出一个instance或者新建一个instance,然后执行里面的method。所以不能保证到底里面是哪个instance,也就不能用里面的实例变量。Stateful 每次method call都会从同一个instance里call,但... 阅读全文
posted @ 2016-01-22 00:25 sleepyface 阅读(202) 评论(0) 推荐(0) 编辑
摘要: Struts 是单例的,和servlet一样是单例多线程,所以要注意线程安全。主要就是注意尽量不要使用实例变量,而是用局部变量。 阅读全文
posted @ 2016-01-14 10:46 sleepyface 阅读(116) 评论(0) 推荐(0) 编辑