我想使用线程池在单独的线程上每秒调用10次方法。这样做的一个好方法是什么?
答案 0 :(得分:2)
使用线程在单独的线程上每秒调用一次方法10次 池
定义该方法
让我们假设您要执行的方法是MyClass
类的class MyClass{
static void myMethod(){
// some task
}
}
,如下所示。
Runnable
定义一个 Runnable runnable = () ->{
for(int i=0; i<10; i++){
try{
Thread.sleep(1000);
MyClass.myMethod();
}catch{}
}
};
每秒执行该方法10次的
int threadCount = 10; //whatever number of threads you wish
ExecutorService executor = Executors.newFixedThreadPool(threadCount);
初始化线程池
executor.execute(runnable);
开始执行
mapComp ::
m ->
(K -> V -> m -> m) ->
(m -> Int) ->
KVPairs -> IO ()
mapComp empty insert size kvpairs = do
let m = foldr ins empty kvpairs where
ins (k, v) t = insert k v t
if size m /= length kvpairs
then putStrLn $ "FAIL: " ++ show (size m) ++ ", " ++ show (length kvpairs)
else pure ()
答案 1 :(得分:1)
您需要使用Executor框架维护线程(可以使用固定线程池),并使用这些线程并行调用方法。
ExecutorService执行程序= Executors.newFixedThreadPool(threadCount);
executor.submit(任务);
答案 2 :(得分:0)
如果您只想10个并行线程,请使用带有固定线程池的ExecutorService
。
如果您想每秒完成某件事,则需要使用计划的线程池。
目前尚不清楚您真正需要什么。