gpt4 book ai didi

java.util.并发 : calculating primes

转载 作者:行者123 更新时间:2023-11-30 07:38:06 25 4
gpt4 key购买 nike

我是包裹的新手java.util.concurrent .我创建了以下程序,使用多线程和单线程策略测试数字是否为质数。

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class IsPrime
implements Runnable
{
private static final long UPPER_BOUND=100000;
long value;//the number observed
private IsPrime(long value)
{
this.value=value;
}
/** returns wether value is a prime number (simple and stupid method ) */
private boolean isAPrimeNumber()
{
if(value==1 || value==2) return true;
if(value%2L==0) return false;
for(long i=3;i< value;++i)
{
if(this.value%i==0) return false;
}
return true;
}

@Override
/** calls isAPrimeNumber */
public void run()
{
boolean result=isAPrimeNumber();
//if(result) System.out.println("["+this.value+"]");
}

/** loop from 3 to UPPER_BOUND, multithreaded */
private static long loopMT()
{
long now=System.currentTimeMillis();
ExecutorService service=Executors.newFixedThreadPool(10);

for(long i=3;i< UPPER_BOUND;i+=2)
{
service.submit(new IsPrime(i));
}
service.shutdown();
return System.currentTimeMillis()-now;
}

/** loop from 3 to UPPER_BOUND, NOT multithreaded */
private static long loop()
{
long now=System.currentTimeMillis();
for(long i=3;i< UPPER_BOUND;i+=2)
{
new IsPrime(i).run();
}
return System.currentTimeMillis()-now;
}

public static void main(String[] args)
{
long n1=IsPrime.loop();
long n2=IsPrime.loopMT();
System.out.println(""+n1+" >>> "+n2);
}
}

对于 loopMT 方法,它是使用包 java.util.concurrent 类的正确方法吗?是否有另一种(更安全、更优雅)的方式来编写这个程序?我可以在多线程环境中使用 System.out 吗?

非常感谢您的建议

皮埃尔

最佳答案

作为System.outPrintStream 的实例它是线程安全的。所以它适合训练示例。但一般来说,不同线程的输出对我来说似乎不是一个好主意。最好有专门的输出线程来异步接受输出请求。

可能,我宁愿实现 Callable<Boolean>正如 finnw 所建议的那样,否则我在 IsPrime 中看不出任何理由除了 CPU 消耗之外的类。

关于java.util.并发 : calculating primes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2153439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com