- 博客(22)
- 资源 (5)
- 收藏
- 关注
原创 Java多线程下载文件
文件下载采用多线程方式能够充分利用CPU资源,关键点是设置线程的读取开始和结束位置。下面的代码,采用线程池启动10个线程来执行下载。import java.io.BufferedInputStream;import java.io.IOException;import java.io.RandomAccessFile;import java.net.HttpURLConnectio
2012-02-29 00:19:35 3662 12
原创 数据库设计最佳实践
数据库设计包括:库的设计,表的设计,字段的设计,主键和外键的设计,索引设计,约束设计。我们先讨论前四个。 库设计:1、数据库名称要明确,可以加前缀或后缀的方式,使其看起来有业务含义,比如数据库名称可以为Business_DB(业务数据库)。2、在一个企业中,如果依赖很多产品,但是每个产品都使用同一套用户,那么应该将用户单独构建一个库,叫做企业用户中心。3、不同类型的数据
2012-02-26 22:13:45 2061 5
原创 多线程获取线程返回值---Future And CompletionService
在某些应用场景下,我们需要获取线程的返回值,采用传统方式或许比较麻烦,那么jdk5为我们封装好了Future和CompletionService。 Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。计算完成后只能使用get 方法来检索结果,如有必要,计算完成前可以阻塞此方法。取消则由 cancel 方法来执行。还提供了其他方法,以确
2012-02-25 11:46:27 7398 3
原创 多线程循环技术锁存器---CyclicBarrier
一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线
2012-02-25 10:55:07 1423 2
原创 多线程计数器锁存器---CountDownLatch
CountDownLatch 是一个通用同步工具,它有很多用途。将计数 1 初始化的CountDownLatch 用作一个简单的开/关锁存器,或入口:在通过调用countDown() 的线程打开入口前,所有调用await 的线程都一直在入口处等待。用N 初始化的CountDownLatch 可以使一个线程在 N 个线程完成某项操作之前一直等待,或者使其在某项操作完成 N 次之前一直等待。
2012-02-25 10:25:30 1875 3
原创 JAVA5线程池使用
线程池是Java5提供的一个新技术,方便我们快速简洁的定义线程池。包括如下: 诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。请求以某种方式到达服务器,这种方式可能是通过网络协议(例如 HTTP、FTP 或 POP)、通过 JMS 队列或者可能通过轮询数据库。不管请求如何到达,服务器应用程序中经常出现的情
2012-02-24 00:13:52 3976 8
原创 阻塞队列使用---ArrayBlockingQueue
ArrayBlockingQueue是JAVA5中的一个阻塞队列,能够自定义队列大小,当插入时,如果队列已经没有空闲位置,那么新的插入线程将阻塞到该队列,一旦该队列有空闲位置,那么阻塞的线程将执行插入。从队列中取数据为:take,放数据为:put。下面的例子模拟了两个队列的插入和获取,首先在队列2中插入一个数据,启动线程2向队列2中插入数据时,该线程将阻塞在队列2等待,同时启动线程1向队列1中插入
2012-02-23 22:54:29 1595 3
原创 Hibernate--Increment和Hilo主键生成策略原理
最近项目中遇到集群问题,比如我们有两个集群节点,在正常情况下只有一个节点工作(A),当出现异常时切换到另一个集群节点(B)上。项目中使用Hibernate的increment作为数据库主键生成策略。它的原理如下:Hibernate初始化完成后,当获取主键时,会查询一次数据库将最大的Id查询出来,之后的操作就全部是在内存中维护主键的自增,保存时更新到数据库,其源码如下:package org
2012-02-21 21:21:37 2563 3
原创 Java5多线程---SemaPhore使用
目前只是学习和使用该对象,加深对多线程的理解以及运用。SemaPhore,一个信号量对象,可以定义信号量的个数,通过该信号量控制线程同步的数量。例如我们只允许同步三个线程进入共享资源,其它线程都阻塞。好比,厕所有三个坑,十个人进去,每次只能进去三个。采用信号灯来实现。其优势为可以被其它线程唤醒,如果使用互斥锁,那么一旦出现异常,该锁将不会释放,该锁只能由自己释放。比如:一个人上厕所,如
2012-02-19 23:42:13 1441 5
原创 Hibernate事务异常,查询和更新并存卡死表
最近项目中遇到一个问题:查询和更新事务异步运行,当并发出现在某个表上时,SQLServer数据库会将该表锁死,导致程序无法执行。但是Oracle和MySql不会。项目采用Hibernate作为ORM框架,问题集中在多对多映射上。 项目问题暴露和解决顺序如下:系统中有两个实体类,A类和B类,它们之间为多对多关联。项目目标是根据A的名称,来找到B,然后将B删除。如果在A下面当前
2012-02-18 10:05:38 3197 2
转载 JDBC事务隔离级别
如果DBMS支持事务处理,它必须有某种途径来管理两个事务同时对一个数据库进行操作时可能发生的冲突。用户可指定事务隔离级别,以指明DBMS应该花多大精力来解决潜在冲突。例如,当事务更改了某个值而第二个事务却在该更改被提交或还原前读取该值时该怎么办。 假设第一个事务被还原后,第二个事务所读取的更改值将是无效的,那么是否可允许这种冲突?JDBC用户可用以下代码来指示DBMS允许在值被提交前读取
2012-02-16 17:02:19 834 2
原创 JAVA5---Exchange使用
该类用于处理,偶数个线程之间的数据交换。比如有两个线程A和B,当A开始运行并准备就绪数据后,它就会等待B开始运行,直到B准备好数据,两个线程马上开始交互数据。如果有三个线程将导致死锁。例子如下:开启一个缓冲线程池,启动两个线程交换数据,每个线程准备时间采用sleep一段时间来模拟。代码如下:import java.util.concurrent.Exchanger;import ja
2012-02-14 22:52:08 1427 3
原创 JAVA5多线程---Condition使用---线程通信
线程之间除了同步互斥,还要考虑通信。在Java5之前我们的通信方式为:wait 和 notify。那么Condition的优势是支持多路等待,就是我可以定义多个Condition,每个condition控制线程的一条执行通路。传统方式只能是一路等待。我们可以先分析下Java5 Api中的缓冲队列的实现: 假定有一个绑定的缓冲区,它支持 put 和 take 方法。如果试图在空的缓
2012-02-13 22:51:51 1073 3
原创 多线程---缓存系统
首先解释下缓存系统: 在程序运行过程中,有些数据我们不会经常修改,例如数据库中性别字段,但是我们却经常使用,如果每次都从数据库中获取,那么将会降低程序性能。那么我们可以在内存中分配一个区域专门存放我们第一次从数据库中拿出的数据。思路如下:我们使用Map来充当我们的缓存区域,当使用性别值时,可以先看看map中是否有值,如果有那么拿出来,如果没有那么查询数据库,并为map赋值。
2012-02-13 21:50:35 1945 4
转载 JAVA网络编程Socket常见问题 【长连接专题】
http://www.cnblogs.com/hailiang/archive/2011/11/24/2261087.html
2012-02-12 15:56:59 1008 2
原创 Cglib实现动态代理原理
我们可能会有这样的需求,系统已经上线运行了。但是需要对某些人和某些方法进行权限过滤。例如:我们允许张三进行所有操作,包括增删改查,只允许其他用户查询。 首先想到的可能是,在每个方法中都加入逻辑判断,这样违背了开闭原则,极有可能引入其它错误。那么我们可以使用动态代理的方式,在运行时动态的进行权限校验,不需要修改原先的逻辑代码,只要通过增加动态代理类、拦截器类、拦截器类
2012-02-09 23:32:37 1818 2
原创 如何接受命令行输入
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入显示名称......");String line = reader.readLine(); System.out.println(line);
2012-02-08 16:34:58 792 2
原创 学会发现
如何学会发现: 平时多细心观察,多思考,多学习。总结规律。有一个两个,我能不能弄出三个四个,由三个四个我能不能弄出八个十个,以此我能不能弄出更多。如果这样都成功了,那么我们可以说这是一个较为科学的规律,在数学上叫归纳法。其实这样还不能完全下定论,我们只是假设这是可以成功的,然后去做,围绕着成功去做,将不成功的踢掉换成以为会成功的,然后再去做,然后再替换,那么最终我们必然会获取成
2012-02-07 00:34:18 838 3
原创 Eclipse配置Tomcat,无法访问
在Eclipse中添加一个新服务,比如tomcat,当操作完成后,启动服务,但是通过在浏览器中输入:http://localhost:8080无法到tomcat页面。原因在于,我们使用的是eclipse自带的tomcat需要如下修改:1、添加新服务,如下图:点击next后,不要将项目添加到Configured里面,直接点击完成:然后双击新建的服务:修改Server
2012-02-05 17:10:40 4262 4
原创 Eclipse改变Jsp页面的编码
Eclipse默认的Jsp模板编码为:ISO-8859-1,这样不支持中文,我们可以改为UTF-8 或者GB18030操作步骤如下:1、点击Eclipse菜单栏,windows---preferences弹出如下UI界面:找到Web节点,展开该节点找到JSP Files自己的,点击在右侧出现如下UI界面:在Add the suffix下拉框中选择要修改的模板后缀,当前为J
2012-02-05 16:46:41 1096 2
原创 Hibernate动态查找DetachedCriteria
投影1、单个属性,单条记录2、多个属性,单条记录3、单个属性,多条记录4、多个属性,多条记录 投影和分页
2012-02-03 00:18:28 915 1
原创 Hibernate获取JDBC连接
获取JDBC连接项目背景: 数据库中某个表存在大字段,对于oracle来说,像blob,clob和longrow都是大字段类型。当查询该表时,往往存在性能问题,但是现有的系统又不允许重构,因此只能想办法优化。如果采用Hibernate来查询,性能上根本无法保证。因此考虑使用JDBC来直接查询。 获取JDBC的Connection语法如下: Connec
2012-02-02 23:56:11 1070 3
Spring事务传播特性解析
2013-11-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人