bean标签中的id和class的用处 如何优雅的使用和理解线程池?你怎么看?

[更新]
·
·
分类:互联网
1660 阅读

bean标签中的id和class的用处

如何优雅的使用和理解线程池?你怎么看?

如何优雅的使用和理解线程池?你怎么看?

要把java线程池理解好并且用好,需要把并发编程的基础知识掌握好,并且把线程池的所有API的官方文档仔细阅读研究一遍。这里把优雅的使用线程池的要点总结如下:
1. 弄明白你要用线程池做什么。例如你的目的是把同步API改造为异步,还是想要并发请求多个外部服务,还是减少线程的创建和销毁以处理用户请求等。
2. 根据你的实际项目需求,配置好线程池的参数,具体包括corePoolSize, maximumPoolSize, 阻塞队列, keepAliveTime,线程工厂 和 饱和策略(或者说是RejectedExecutionHandler)。
3. 根据你的应用特点部署线程池。有的后台服务应用适合在启动的时候一次性创建好线程池,在应用的执行过程不再修改线程池。有的时候,应用适合临时创建一个线程池并且把任务提交进去,用完之后立即销毁。
4. 当你决定不再使用线程池之后,应该调用shutdown()以优雅的关闭线程池。shutdown可以保证之前已经提交到线程池中的任务不会被丢弃,保证了数据安全。
5. 当调用了shutdown之后,线程池此时已经可能在执行任务,只是关闭了提交任务的入口。如果需要等待线程池完全终止,需要调用awaitTerminate以等待线程池把队列中的任务全部处理完成并且清理完成,然后才返回。awaitTerminate成功返回了,线程池算是真的清理干净了。
总结一下,线程池按照创建(构造方法)、提交任务(execute)、清理(shutdown),等待清理结束(awaitTerminate)的顺序调用API,这样使用线程池才算优雅。要想用好java线程池,最大化优化程序的性能可以参考我公众号里的分析文章。

如何正确利用Spring连接数据库?

目前我知道的就四种。
如下所示:
1:使用spring自带的DriverManagerDataSource 配置文件如下:
lt?xml version1.0 encodingUTF-8?gt
ltbeans





xsi:schemaLocation





lt!-- 使用XML Schema的p名称空间配置 --gt
ltbean namedataSource

p:urljdbc:mysql://localhost:3306/test
p:usernameroot
p:password123456 / gt
lt!-- 采用property的普通配置 相比之下有点麻烦,但是效果是一样的哦,--gtlt!--
ltbean namedataSource
ltproperty namedriverClassName /gt
ltproperty nameurl valuejdbc:mysql://localhost:3306/test /gt
ltproperty nameusername valueroot /gt
ltproperty namepassword value123456 /gt
lt/beangt
--gt
lt/beansgt
2:C3P0数据源。
需要使c3p0的核心jar包,我使用的是c3p0-0.9.1.jar,比较稳定,推荐使用。一般在下载hibernate的时候都会自带一个: 我在路径下找到的。
配置文件中如下:
lt?xml version1.0 encodingUTF-8?gt
ltbeans





xsi:schemaLocation








lt!-- 使用XML Schema的p名称空间配置 --gt
ltbean namedataSource

p:jdbcUrljdbc:mysql://localhost:3306/test
p:userroot
p:password123456 gt
lt/beangt
lt!-- 采用property的普通配置 相比之下有点麻烦,但是效果是一样的哦 建议使用上面的--gt
lt!-- ltbean namedataSource
ltproperty namedriverClass /gt
ltproperty namejdbcUrl valuejdbc:mysql://localhost:3306/test /gt
ltproperty nameuser valueroot /gt
ltproperty namepassword value123456 /gt
lt/beangt
--gt
lt/beansgt
3:使用apache的dbcp插件连接数据库 需要下载的jar包:commons-dbcp.jar,commons-pool.jar,commons-collection.jar
spring的配置文件中如下:
lt?xml version1.0 encodingUTF-8?gt
ltbeans





xsi:schemaLocation








lt!-- 使用XML Schema的p名称空间配置 --gt
ltbean namedataSource

p:urljdbc:mysql://localhost:3306/test
p:usernameroot
p:password123456 gt
lt/beangt
lt!-- 采用property的普通配置 相比之下有点麻烦,但是效果是一样的哦 建议使用上面的--gt
lt!-- ltbean namedataSource
ltproperty namedriverClassName /gt
ltproperty nameurl valuejdbc:mysql://localhost:3306/test /gt
ltproperty nameusername valueroot /gt
ltproperty namepassword value123456 /gt
lt/beangt
--gt
lt/beansgt
4:使用hibernate数据源 需要hiberante核心jar包,我使用的hibernate1的版本是
目前三大框架较流行,spring一般与hiberante做搭档,数据库连接方式写在hiberante的配置文件中,在spring管理hibernate中的配置文件
中,直接读取hibernate核心配置文件即可。在使用hibernate连接数据库的时候需要读取的配置文件和相应的实体类
可参照下面的自己配置一下
ltbean idsessionFactory classorg.springframework.orm.hibernate3.LocalSessionFactoryBeangt
ltproperty nameconfigLocationsgt
ltlistgt

lt/listgt
lt/propertygt
ltproperty namemappingLocationsgt
lt!-- 所有的实体类映射文件 --gt
ltlistgt
ltvaluegtclasspath:com/hibernate/*.hbm.xmllt/valuegt
lt/listgt
lt/propertygt