小编Pio*_*old的帖子

如何将虚拟线程与 ScheduledExecutorService 一起使用

我想使用Java 19和ScheduledExecutorService中引入的虚拟线程。我需要安排一些线程每分钟运行一次。我知道我可以使用这样的东西:ScheduledExecutorService executor = Executors.newScheduledThreadPool(100, Thread.ofVirtual().factory());但看起来我被迫设置池大小。

我正在寻找与此类似的织物方法:ScheduledExecutorService executor = Executors.newScheduledThreadPool(Thread.ofVirtual().factory()); 但我找不到它。我想遵循“每个任务一个虚拟线程”原则,而不是被迫在池中设置固定数量的线程。你知道我是否可以以这种方式使用 ScheduledExecutorService 吗?或者存在一些适合虚拟线程的替代方案?

更新

让我详细说明我试图解决的问题。所以我需要创建1000多个任务(我不知道确切的数字,我只能估计)。应该定期运行。有些需要每分钟运行一次,有些需要每两分钟运行一次,等等。

这些任务将执行 I/O 操作(网络请求)。所以虚拟线程看起来是一个不错的选择。但我需要一些调度功能来实现它。通过选择 ScheduledExecutorService 我可以使用以下方法: scheduledThreadPoolExecutor.scheduleAtFixedRate(runnableTask, 60, 60, TimeUnit.SECONDS )

如果我不需要调度,我只需创建一个像这样的执行器:var executor = Executors.newVirtualThreadPerTaskExecutor() 但是普通的 ExecutorService 不提供任何调度功能。我将被迫自己实施调度。

所以现在我找到的最好的解决方案是:Executors.newScheduledThreadPool(1000, Thread.ofVirtual().factory()); 这通常看起来不错,但我想知道Java API中是否存在其他解决方案,它允许我创建ScheduledExecutor,但我不会被迫设置线程池的大小。当我们考虑虚拟线程时,这对我来说看起来有点奇怪。

java multithreading executorservice

7
推荐指数
1
解决办法
4066
查看次数

为什么在将short []转换为char *时将数组反转?

对于以下代码:

short shortArray [] = { ( 'B' << 8 ) + 'A', ( 'D' << 8 ) + 'C', ( 'F' << 8 ) + 
'E', 'G' };
cout << (char*)shortArray;
Run Code Online (Sandbox Code Playgroud)

输出为:

ABCDEFG

有人可以向我解释其工作方式吗?

c++ casting short char endianness

5
推荐指数
1
解决办法
203
查看次数

标签 统计

c++ ×1

casting ×1

char ×1

endianness ×1

executorservice ×1

java ×1

multithreading ×1

short ×1