工作感悟

IOC

在运行期确定要生成的对象,减少硬编码的依赖,可以对Object生命周期管理,带来动态性的便利。
DataSource接口,有直接JDBC访问的DataSource, 又带connection pool的DataSource.
通过IOC,可以确定运行环境的DataSource是否需要connection pool,而不需要改动任何编码.

同步

同步是为了保持对象在业务处理过程中的一致性,在多线程环境中这种问题尤其存在。同步处理得好与坏直接影响系统的性能。
Shared Object: 银行账户余额(小李) = 1000
Thread 1: 开始 -> 获取小李银行账户余额 -> 账户余额 - 500元消费 -> 结束
Thread 2: 开始 -> 获取小李银行账户余额 -> 账户余额 - 200元水电费 -> 结束
并行过程中,Thread 1和Thread 2获取的账户余额都是1000,Thread 2最后余额是800,而不是真实的300。
加了同步以后:
Shared Object: 银行账户余额(小李) = 1000
Thread 1: 开始 -> 获取小李银行账户余额 -> 账户余额 - 500元消费 -> 结束
Thread 2:                                                              开始 -> 获取小李银行账户余额 -> 账户余额 - 200元水电费 -> 结束
这样就能保持数据的完整性。可以看出同步会延长业务单元的执行时间,如果这种争用不频繁,可以用乐观
锁的方式提高性能。
同步方式只在单一JVM下有效,在多台server的集群环境中是无效的。

事务

以一个交易过程为例子:
开始 -> 公司A - 20万 -> 公司B + 20万 -> commit(提交) -> 结束 (整个业务流程)
在公司B + 20万的过程中出错了,这个业务失败,所以公司A要加回20万.
做法是整个业务流程共用一个connection,在最后才commit, 如果中间有错误,就整个rollback。
但是,connection是一个稀缺资源,事务过长会导致系统connection不够的情况,所以控制事务的粒度是一个关键。

一年半的工作感悟
未完待续..........

你可能感兴趣的:(jvm,thread,多线程,工作,IOC)