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

发现素数

接口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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值