- 博客(90)
- 资源 (2)
- 收藏
- 关注
原创 Java线程之fork/join框架
fork/join框架是用多线程的方式实现分治法来解决问题。fork指的是将问题不断地缩小规模,join是指根据子问题的计算结果,得出更高层次的结果。fork/join框架的使用有一定的约束条件:1. 除了fork() 和 join()方法外,线程不得使用其他的同步工具。线程最好也不要sleep()2. 线程不得进行I/O操作3. 线程不得抛出checked excepti
2013-05-10 17:55:26
14543
原创 Java线程之CompletionService
当使用ExecutorService启动了多个Callable后,每个Callable会产生一个Future,我们需要将多个Future存入一个线性表,用于之后处理数据。当然,还有更复杂的情况,有5个生产者线程,每个生产者线程都会创建任务,所有任务的Future都存放到同一个线性表中。另有一个消费者线程,从线性表中取出Future进行处理。CompletionService正是为此而存在,它是
2013-05-08 22:03:00
14881
原创 Java线程之FutureTask
FutureTask是Future和Callable的结合体。传统的代码是这样写的Future f = executor.submit(new Callable());然后通过Future来取得计算结果。但是,若开启了多个任务,我们无从知晓哪个任务最先结束,因此,若要实现“当某任务结束时,立刻做一些事情,例如记录日志”这一功能,就需要写一些额外的代码。FutureTask正是为此而存在
2013-05-08 21:50:23
19551
原创 Java线程之立刻处理刚完成的任务
ExecutorService的invokeAll()方法可以一次启动多个线程,并将这些线程的执行结果放入一个List。这是一个很方便的方法,但有不足之处,那就是必须等待所有线程全部结束之后,才会返回List,之后才能处理线程的结果。若有些线程执行很快,比如几秒就结束了,另一些线程执行很慢,要几小时,那么短时间线程的执行结果仍然无法立刻获取,必须等几小时之后,所有线程都结束了,他们的执行结果才可用
2013-04-28 13:58:55
3860
原创 Java线程之ExecutorService.invokeAny()
有一类多线程编程模式是这样的:启动多个线程,相互独立的(无同步)去计算一个结果,当某一个线程得到结果之后,立刻终止所有线程,因为只需要一个结果就够了。实际应用场景:作为男生,电脑上必须有苍老师的爱情动作片。这种片子必须藏得非常隐蔽,隐蔽到什么程度呢?自己都忘了把它藏哪里了,这可咋办啊?编写多线程程序,针对每一个硬盘分区,启动一个线程,搜索该硬盘分区上的所有文件,找名字中含有“苍老师”的文件。由
2013-04-28 10:49:17
9483
7
原创 Java线程之Exchanger
Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据。当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用了exchange()方法,然后以线程安全的方式交换数据,之后线程A和B继续运行public class ThreadLocalTest { public static void main(Stri
2013-04-26 15:22:50
19013
原创 Java线程之ThreadLocal
ThreadLocal的功能是实现一个线程独立的全局变量。使用全局变量的好处是,程序的任何地方都可以使用它,而无需进行参数传递。在单线程环境下,将类的属性和方法定义为static,即可实现全局变量。但是在多线程环境下,普通的全局变量是线程间共享的,一个线程修改了全局变量的值,另一个线程可以看到这个修改。使用ThreadLocal实现全局变量,即保留了随处可用这一优点,又能做到线程间
2013-04-26 14:43:52
5107
原创 Java线程之Phaser
Phaser是一个灵活的线程同步工具,他包含了CyclicBarrier和CountDownLatch的相关功能 首先,来看一下如何用Phaser替代CountDownLatch。对于CountDownLatch而言,有2个重要的方法,一个是await()方法,可以使线程进入等待状态,在Phaser中,与之对应的方法是awaitAdvance(int n)。CountDownL
2013-04-23 11:27:36
13154
原创 Java线程之CyclicBarrier
CountDownLatch和CyclicBarrier都能在线程执行时设置中间等待位置,表面上看相似度很高,下面讲讲他们的区别: CountDownLatch是线程A等待B。它有着明确的顺序,A先执行,到中间等待位置后,A调用countDown()方法,激活B,B才开始执行。再强调一下,这个类强调顺序,A先,B后 CyclicBarrier是线程间互相等待,即A和B互相等待,
2013-02-19 20:53:27
4985
原创 Java实现希尔排序
希尔排序步长的选择很重要,不同的选择方式性能差异很大。为了做实验,生成一个长度为 0x400000(该数字为16进制)随机的整形数组,存放于硬盘上的文本文件内。每次排序均将此数组读入内存后,再排序,再将排序结果写入硬盘文件。只对排序操作计时,读文件和写文件不计时。步长选择方式为最基本的1,2,4,8,16,32,64...size/2在我的测试中,排序耗时7150毫秒 priv
2013-02-17 23:00:15
4581
原创 Java线程之CountDownLatch
CountDownLatch是一个高级的线程同步工具,可以理解为一个闸门,先运行一些线程,计算出一些结果,满足条件后,开闸,然后另一些线程启动。换句话说,它将多个线程分为2类,一类开闸前运行,一类开闸后运行。对于开闸后运行的线程,调用await()方法后,进入等待状态,等待开闸。它内部有一个计数器,初始状态计数器为用户设定的正整数,当开闸前某个线程运行完毕后,调用它的countDown()方法
2013-02-15 23:12:02
2671
原创 Java线程之Semaphore
之前一直对Semaphore不是很理解,感觉它功能十分简单,用Lock加Condition完全可以轻易替代它,觉得它根本没有存在的必要。最近遇到一个例子,用Semaphore可以优雅的实现,用Lock加Condition却让我大费脑筋,主要原因是自己水平太菜。记录下来,免得以后忘了。例子:某单位有3台打印机,有10个用户提交打印任务,写程序模拟对打印机的管理。不废话,直接上代码publ
2013-02-13 21:15:19
2773
原创 对一个整数用加法进行分解
比如输对于整数5,分解的结果为:5 = 4 + 15 = 3 + 25 = 3 + 1 + 15 = 2 + 2 + 15 = 2 + 1 + 1 + 15 = 1 + 1 + 1 + 1 + 1 private static void splitInteger(int n) { if(n10) { System.out.p
2012-01-11 10:42:32
4387
原创 堆排序算法
终于整明白啥是堆排序了,原来堆只是个幻象,是个虚拟模型,不必要真的弄一棵树出来,直接操作的对象仍然是数组。若要升序排序,则构造大顶堆,每次将堆顶元素删除后放置到堆尾的后一个位置,堆不断缩小。直接上代码 /** * 堆排序演示程序 */ public static void main(String[] args) { int[] a = createArray(20); System.out.println(Arrays.toString(a)); heapSort(a);
2011-05-23 12:01:00
2987
原创 找出符合条件的组合
将0~9共10个数字填入下面的表达式,使得该表达式成立。找出所有可能的情况。【 】【 】【 】 + 【 】【 】【 】 = 【 】【 】【 】【 】public class MainTest { public static void main(String[] args) { showAllResult(10); } private static void showAllResult(int num) { int[] nums = new int[num]; findAl
2010-09-29 14:29:00
2762
原创 小技巧
<br />在新闻标题中加入“new”标志:" <img src=/jwch/info/images/new03.gif border=none>"
2010-09-29 09:51:00
2164
原创 如何重载equals方法
<br />1、参数是Object类型的,将参数命名为otherObject<br />2、检测两个引用是否指向同一个对象<br />if (this == otherObject) return true;<br />3、如果otherObject是null,则返回false<br />if (otherObject == null) return false; <br />4、比较两个对象是否属于同一个类<br />if (getClass() != otherObject.getClass()) re
2010-09-27 16:18:00
2810
原创 JAVA格式化字符串速查
<br />语法规则:<br />%[argument_index$][flags][width][.precision]conversion<br /><br />正规使用方法:<br />StringBuilder sb = new StringBuilder();Formatter formatter = new Formatter(sb, Locale.US);formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")<br
2010-09-25 22:17:00
3547
原创 取得汉字拼音
<br />用输入法生成器<br />"C:/Program Files/Windows NT/Accessories/Imegen.exe"<br />逆转换拼音输入法文件C:/WINNT/SYSTEM32/WINPY.MB<br />会生成一个同名的TEXT文件
2010-09-08 16:22:00
3054
原创 mysql环境变量
<br />通过 show variables like "sql_safe_updates" 查看环境变量的当前值<br />通过 set sql_select_limit = 0; 修改环境变量<br />mysql手册的5.1.4小节是环境变量介绍
2010-09-04 11:29:00
1431
原创 Mysql中用load data命令载入中文数据
1、数据库编码为utf-82、存放数据的txt文档采用无BOM的utf-8编码,具体设置方式为使用notepad++软件,如下图所示3、使用可视化mysql客户端进行操作,既MySQL Workbench 5.2 CE4、使用如下语句: load data local infile 'd:/aaa.txt' into table teacher set department=replace(department,'/r',''); 其中department为teacher表的最后一个字段,默
2010-09-02 18:53:00
4099
原创 一副扑克52张牌(没有大小王),模拟洗牌
纸牌类,代表一张纸牌:public class Card { public CardSuit suit; //花色 public int value; //点数,1代表A,11代表J public Card(CardSuit suit, int value) { this.suit = suit; this.value = value; } @
2009-08-21 19:23:00
6873
1
原创 给定一个集合(字符数组),打印出它的所有子集
/** * 给定一个集合(字符数组),打印出它的所有子集 * @param set - 给定的集合(字符数组) */ public void showAllSubset(char[] set) { boolean[] flags = new boolean[set.length]; //若第i个元素为true,则表示集合中第i个元素被选中 int count =
2009-07-25 00:03:00
4334
1
原创 获取html页面的字符集编码方式
利用Java来抓取网页的时候,页面的字符集编码特别重要,弄错了的话很有可能抓到的是乱码。俺写的这个代码在一般情况下还是能够正确识别页面的charset的,只是效率有点低。 public String getCharset(String link) { String result = null; HttpURLConnectio
2009-07-12 23:19:00
6487
原创 Eclipse编码问题汇总
在Eclipse中,默认编码是GBK当我们通过网络取得一些内容时,直接System.Out.println结果会显示不正确 keyWord = URLEncoder.encode(keyWord, "UTF-8"); URL url = new URL("http://www.google.com/search?q=" + keyWord + "&hl=en&ie=UTF-8&
2009-07-11 16:30:00
2365
翻译 JPA中one-to-one关系的单向映射示例
设有2个实体,雇员和停车位。一个雇员只能拥有一个停车位,一个停车位只能属于一个雇员,因此他们是1对1的关系。在1对1关系中,我们需要区分主导者和从属者,所谓的主导者就是拥有外键的实体。本例中我们将雇员设置为主导者。下面我们用sql语句建立者两个表(基于MySql5.1数据库系统): -- 创建EMPLOYEE表 --CREATE TABLE
2009-07-07 15:16:00
23657
3
原创 Eclipse + Mysql + OpenJpa 开发环境搭建
1、要下载OpenJPA的具体实现,一共8个jar文件,一个都不能少,全部都要导入到Eclipse中2、下载 mysql-connector-java-5.1.7 ,导入到Eclipse中。3、实体的ID生成策略一定要设置为 IDENTITY4、数据库表中的ID字段,一定要设置为 AUTO_INCREMENT 配置文件: org.apache.openjpa
2009-07-05 18:14:00
3461
翻译 理解JPA,第二部分:JPA中的关系
你用JAVA写的web程序非常依赖于数据之间的关系,如果你处理不好的话,结果将会变得非常糟糕。在这篇文章中,作者将向你展示,如何利用JPA的标注,在面向对象代码与关系数据之间创建一个透明的接口。最终的数据关系将会更容易管理,并且更具备可移植性。 数据对于任何一个应用程序来讲都是必不可少的,而数据之间存在的关系也具有同样的重要性。关系型数据库能够支持数据表之间的各种关系,并
2009-07-04 18:23:00
3995
翻译 理解JPA,第一部分:面向对象的数据持久化方案
很多JAVA项目在处理数据持久化的时候,都努力想寻找一种很自然的面向对象的方式。JPA,作为JSR220的一个产物,提供了一种标准化的操作方式。这个介绍JPA的系列文章一共有2部分,在第一部分里,您将了解到JPA是如何使得数据持久化操作融入到你的面向对象架构当中的。Why JPA? 对于许多JAVA开发者来说,都会问到同一个问题:
2009-07-04 12:50:00
4251
原创 将数字格式设置为文本格式,并使其出现左上角绿色小三角
ActiveCell.NumberFormatLocal = "@" ActiveCell.FormulaR1C1 = ActiveCell.Formula ActiveCell.Offset(1).Select
2009-04-03 09:54:00
6296
原创 初学遗传算法,一个练手的小程序
最近研究了一下遗传算法,挺有意思的,在一个老外的网站上看到了这个小例子,比较有趣,自己用java实现了一下(老外是用c++实现的)。 问题:有10张纸牌,编号分别是1到10,现在要将这10张纸牌分为2堆,其中一堆求和为36,另一堆求积为360,问应该怎么分?(也就是说,最终的结果应该是:一堆为2+7+8+9+10=36,另一堆为1*3*4*5*6=360。当然,如果修改题目中的参数,
2008-10-03 20:32:00
2109
3
原创 AJAX与java servlet结合使用的小例子
html页面代码(使用了jquery):html xmlns="http://www.w3.org/1999/xhtml">head>meta http-equiv="Content-Type" content="text/html; charset=utf-8" />script type="text/javascript" src="js/jquery-1.2.6.js">script>scr
2008-09-18 10:11:00
5257
1
原创 SQL语句学习(不断更新中。。。。。。)
1.在where字句中使用别名。//错误!!!!//直接这样写是不行的,where字句是不认识别名的 select sal as salary, comm as commission from emp where salary 5000//正确的方法,使用一个子视图select from ( select sal as salary, comm as commission fr
2008-09-08 17:34:00
1658
2
转载 JAVA文件操作类和文件夹的操作(转帖)
package com.gamvan.tools;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import ja
2008-09-05 00:11:00
3480
转载 大型网站架构演变和知识体系(转载)
之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上近来感觉有不少同学都很难明白为什么一个网站需要那么复杂的技术,于是有了写这篇文章的想法,在这篇文章中将阐述一个普通的网站发展成大型网站过程中的一种较为典型的架构演变历程和所需掌握的知识体系,希望能给想
2008-09-04 09:46:00
1604
转载 Hibernian中各种保存方法的区别(转载)
原文地址如下:http://www.blogjava.net/dreamstone/archive/2007/07/29/133071.htmlhibernate的保存hibernate对于对象的保存提供了太多的方法,他们之间有很多不同,这里细说一下,以便区别:一、预备知识:在所有之前,说明一下,对于hibernate,它的对象有三种状态,transient、persistent、detached
2008-09-03 22:26:00
1161
原创 在Eclipse中写第一个hibernate小例子
在hibernate自带的文档中,包含了一个很简单的小例子,不过这个小例子是基于ant的,而且说的不是很详细,不利于新手学习。在这里,我将在Eclipse中实现这个例子,并给出详细的实现步骤。 首先,我们要创建一个数据库,并生成一个表,来供hibernate访问。在这里我们采用MySQL作为DBMS。我们的数据库取名为hbtest,生成一个名叫EVENTS的表。生成数据库的操作比较简
2008-08-30 13:12:00
3666
转载 SOA和SaaS的区别
据国外媒体报道,现在已经出现了一些通过互联网提供SOA服务的需求。美国一家ESB供应商Cape Clear的老板Dana Gardner曾对媒体谈过将SOA、ESB作为一个集成的服务提供的可能性。之后不久,他的公司就通过云计算为用户提供ESB服务。 DanaGardner说,通过云计算提供的SOA工具和平台对于中小企业来说应该有很大的吸引力,因为部署SOA的工程对中小企业来说,需
2008-08-29 10:52:00
6527
原创 调试开源项目:mvnForum论坛
最近在读一个开源论坛的源码,也就是mvnForum,发现源码是很难读懂的,应该对其进行调试,了解其运行时信息,这样有助于对源码的理解。但是我遗憾的发现,mvnForum的源码是基于ant脚本的,并不是一个eclipse工程,因此并不能直接借助eclipse对其进行调试。我试图将其转变为一个eclipse工程,但是配置方面有点问题,始终无法在eclipse中运行。于是我只能想一些其他的笨办法
2008-08-06 13:42:00
5084
原创 炒股软件“大智慧”的一些快捷键
炒股软件“大智慧”的一些快捷键,现在干啥都不如炒股来钱快啊,希望这个能帮助大家赚钱~~~~ 快捷键 功能 快捷键 功能 F1或01+Enter 个股成交明细
2007-09-24 17:26:00
4018
High Performance MySQL 3rd Edition
2012-11-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人