Skip to content

Instantly share code, notes, and snippets.

@yawnt
Created June 3, 2015 13:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yawnt/b5e01fa887dc6d5b65fd to your computer and use it in GitHub Desktop.
Save yawnt/b5e01fa887dc6d5b65fd to your computer and use it in GitHub Desktop.
import java.util.concurrent.ConcurrentLinkedQueue
/*
* ConcurrentLinkedQueue is used in `Mailbox.scala`
* to hold incoming messages for actors
*/
case class Envelope(a: Int)
class MessageQueue {
val queue = new ConcurrentLinkedQueue[Envelope]()
def enqueue(handle: Envelope) = queue add handle
def dequeue(): Envelope = queue.poll()
}
class OtherMessageQueue extends ConcurrentLinkedQueue[Envelope] {
def enqueue(handle: Envelope) = this add handle
def dequeue(): Envelope = this.poll()
}
object Main extends App {
override def main(args: Array[String]): Unit = {
val start = System.currentTimeMillis()
1 to 25 foreach { _ =>
/* val queue2 = new MessageQueue */
/* 0 to 10000000 foreach { n => queue2 enqueue Envelope(n) } */
/* 0 to 10000000 foreach { n => queue2.dequeue() } */
/* val queue3 = new OtherMessageQueue */
/* 0 to 10000000 foreach { n => queue3 add Envelope(n) } */
/* 0 to 10000000 foreach { n => queue3.poll() } */
val queue1 = new ConcurrentLinkedQueue[Envelope]()
0 to 10000000 foreach { n => queue1 add Envelope(n) }
0 to 10000000 foreach { n => queue1.poll() }
}
val end = System.currentTimeMillis()
println(s"TIME: ${end - start}")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment