У меня есть следующий код scala:
package dummy
import javax.servlet.http.{HttpServlet,
HttpServletRequest => HSReq, HttpServletResponse => HSResp}
import scala.actors.Actor
class DummyServlet extends HttpServlet {
RNG.start
override def doGet(req: HSReq, resp: HSResp) = {
def message = <HTML><HEAD><TITLE>RandomNumber </TITLE></HEAD><BODY>
Random number = {getRandom}</BODY></HTML>
resp.getWriter().print(message)
def getRandom: String = {var d = new DummyActor;d.start;d.getRandom}
}
class DummyActor extends Actor {
var result = "0"
def act = { RNG ! GetRandom
react { case (r:Int) => result = r.toString }
}
def getRandom:String = {
Thread.sleep(300)
result
}
}
}
// below code is not modifiable. I am using it as a library
case object GetRandom
object RNG extends Actor {
def act{loop{react{case GetRandom=>sender!scala.util.Random.nextInt}}}
}
В приведенном выше коде я должен использовать thread.sleep
, чтобы обеспечить достаточно времени для обновления result
, в противном случае 0
возвращаетсяКаков более элегантный способ сделать это без использования thread.sleep
?Я думаю, что я должен использовать фьючерсы, но я не могу разобраться в концепции.Мне нужно убедиться, что каждый запрос HTTP получает уникальное случайное число (конечно, случайное число просто для объяснения проблемы).Некоторые советы или ссылки будут оценены.