Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import scala.concurrent.{Await, ExecutionContext, Future}
- import scala.concurrent.duration._
- // No @volatile or `synchronized`
- class Foo {
- private var _id: Option[String] = None
- def set(id: String): Unit = {
- _id = Option(id)
- }
- def unset(): Unit = {
- _id = None
- }
- def get: Option[String] = {
- _id
- }
- }
- object Test {
- val arr = Array[Foo](new Foo, new Foo)
- implicit val ex: ExecutionContext = scala.concurrent.ExecutionContext.Implicits.global
- def main(args: Array[String]): Unit = {
- val f = Future {
- println(s"Thread[${Thread.currentThread.getId}]: set to 0")
- arr(0).set("0")
- }
- .map { _ =>
- val p = arr(0).get
- println(s"Thread[${Thread.currentThread.getId}]: get ${p}")
- }
- .map { _ =>
- println(s"Thread[${Thread.currentThread.getId}]: unset")
- arr(0).unset
- }
- val res = Await.result(f, 100.seconds)
- println(res)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement