3.通过线程门实现Java并发编程

2010/03/24 14:27
阅读数 206

发现素数

  接口com.javaworld.primefinder.PrimeNumberSearcher定义了组件必须遵循的契约。该契约的功能有方法findPrimeNumbers()来指定,如列表1所示。

  列表1.搜索契约

<

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

> 1 PrimeNumberSource findPrimeNumbers(BigInteger lowerBound,
2 BigInteger upperBound);

  com.javaworld.primefinder.PrimeNumberSource是结果句柄必须遵循的接口。它定义了一个方法BigInteger nextPrime(),当被调用时,它应该返回搜索结果缓冲器中的下一个元素。如果结果缓冲器已经被用完,必须返回null值来表示没有结果可用。正如此前所提到的,该方法的执行必须是线程安全的。

  需要指出的是,该示例应用程序任务的重点是找出指定搜索范围内的素数;因此我们可以使用来自java.math.BigInteger类的nextProbablePrime()方法。你可以在效用类com.javaworld.primefinder.PrimeUtil的一个静态方法中封装调用该方法,示例程序如列表2所示。

  列表2.在指定范围内发现首个素数的效用方法

<

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

> 1 public static BigInteger findFirstPrime( long lowerBound, long upperBound)
2
3   {
4
5   BigInteger result;
6
7   BigInteger startPos = BigInteger.valueOf(lowerBound);
8
9   BigInteger nextProbablePrime;
10
11    if (startPos.isProbablePrime(.....)) // some reasonable accuracy
12
13   nextProbablePrime = startPos;
14
15    else nextProbablePrime = startPos.nextProbablePrime();
16
17    if (nextProbablePrime.longValue() >= upperBound)
18
19   result = null ;
20
21    else result = nextProbablePrime;
22
23    return result;
24
25   }

  现在已经定义了建立该解决方案的公共接口和工具,你现在可以对该任务进行细化了。我们将首先定义线程门的实现,它指定控制访问结果缓冲器的方式。

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部