Классическая лучшая мировая практика aync в Scala — это оболочка блокирующих исполнителей с выделенным пулом исполнителей для блокирующих операций. .
Как насчет использования этого способа обработки виртуального потока, когда мы взаимодействуем с существующей библиотекой поддержки неправильных виртуальных потоков?
Например, testWaitOsExecutor метод из вызова виртуального потока.
Код: Выделить всё
private val osExecutor = Executors.newWorkStealingPool()
def testWaitOsExecutor(prams: String) = {
var rst = ""
val rstFuture = osExecutor.submit(
new Runnable {
override def run(): Unit = {
logger.info(
"threadName on OS thread: " + Thread.currentThread().getName
)
osExecutorCalc()
rst = "rst from os executor thread"
}
},
rst
)
rstFuture.get()
}
private def osExecutorCalc(): Int = {
val a = 1
Thread.sleep(15000) // perhaps synchronized code here we don't know
a
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... ual-thread