//import scala.tools.nsc
//import scala.tools.nsc._
import java.util.concurrent._
object SpawnTest {
// define my own runnable method based on io.runnable definition
def runnable (body: => Unit): Unit = new Thread(scala.tools.nsc.io.runnable(body)).start()
def main(args: Array[String]) :Unit = {
System.out.format("[%s] Before spawn a new thread...\n", Thread.currentThread().toString())
val f = scala.tools.nsc.io.spawn {
var sum = 0
for(i <- 1 to 5)
sum += i*i
Thread.sleep(3000) // simulate daemon thread running time
sum
}
System.out.format("[%s] After spawn a new thread...\n", Thread.currentThread().toString())
println(f.get()) // main thread will wait untill daemon thread finish.
runnable {
println("I am a runnable thread not daemon thread..."); // this thread will keep running even after main thread exit!
var sum = 0
for(i <- 1 to 5)
sum += i*i
Thread.sleep(3000) // simulate daemon thread running time
println("The result is: " + sum)
}
println("Main thread exit!")
}
}