多线程素数生成器
本篇文章的示例应用程序将解决一个经典老问题,即在指定范围的数字(例如从1到100万之间)找出所有可能的素数。确切的说,我们的任务就是实现一个软件组件,利用一个方法获得指定范围内的所有素数。假定该组件的客户端要求该方法返回一个线程安全的句柄,一旦其被调用的时候可以访问结果,同时完成在后台或以异步方式找出素数的任务。还有一个条件是该操作必须提供一个阻塞方法来允许素数尽快的被访问或返回,这样该客户端就不用必须在访问结果前等待搜索完成。为了简化这个任务,对句柄返回结果的顺序没有添加限制条件。
在继续阅读本篇文章前,你应该下载本篇文章的代码文件(http://www.javaworld.com/javaworld/jw-03-2009/threadgates-src.zip),然后在自己喜欢使用的IDE中创建一个开发项目。该文件包含十个源文件,其结构如下所示:
1 -src\
2
3 -main\
4
5 -java\
6
7 -com\
8
9 -javaworld\
10
11 -primefinder\
12
13 PrimeNumberSearcher.java
14
15 PrimeNumberSource.java
16
17 PrimeUtil.java
18
19 ThreadGate.java
20
21 PrimeSearchThread.java
22
23 PartitionInfo.java
24
25 PrimeNumberReader.java
26
27 GatedPrimeNumberSearcher.java
28
29 ConcurrentPrimeNumberSource.java
30
31 -src\
32
33 -test\
34
35 -java\
36
37 -com\
38
39 -javaworld\
40
41 -primefinder\
42
43 PrimeFinderTest.java
2
3 -main\
4
5 -java\
6
7 -com\
8
9 -javaworld\
10
11 -primefinder\
12
13 PrimeNumberSearcher.java
14
15 PrimeNumberSource.java
16
17 PrimeUtil.java
18
19 ThreadGate.java
20
21 PrimeSearchThread.java
22
23 PartitionInfo.java
24
25 PrimeNumberReader.java
26
27 GatedPrimeNumberSearcher.java
28
29 ConcurrentPrimeNumberSource.java
30
31 -src\
32
33 -test\
34
35 -java\
36
37 -com\
38
39 -javaworld\
40
41 -primefinder\
42
43 PrimeFinderTest.java
PrimeFinderTest.java是一个JUnit 4测试包;为了测试验证该示例程序,你需要使用JUnit工具。为了遵循Maven 2命名约定,该应用程序的源文件在src/main/java下,而验证该解决方案的JUnit 4测试包则在src/test/java下。下面我们将对这些文件夹的关键内容进行介绍。