import java.util.concurrent.{Callable} import java.util.concurrent.Future import com.dt.util.{ThreadUtils} /** * Created by hadoop on 2016/5/3. */ object ThreadTest { val executors = ThreadUtils.newDaemonCachedThreadPool("work thread") /** * 數據分片 * @param num * @param slice * @return */ def divNum(num: Int, slice: Int = 10): IndexedSeq[(Int, Int)] ={ val step = (num + slice) / slice val result = for(i <- 1 to step) yield{ val a = slice *(i - 1) + 1 val b = a + (slice -1 ) if(b < num) (a,b) else (a,num) } result.filter(_._1 < num) } /** * 在區間搜索 * @param number * @param start * @param end * @return */ def search(number: Int, start: Int, end: Int)= { for(i <- start to end) yield{ if(number % i == 0) i else 0 } } def submitJob(num: Int, slice: Int = 10): IndexedSeq[Future[String]] ={ val range = divNum(num, 200) for(x <- range) yield{ executors.submit(new Callable[String] { override def call(): String = search(num, x._1, x._2).filter(_.!=(0)).mkString(",") }) } } def main(args: Array[String]) { val num = 9 val futures = submitJob(num, 1) for(future <- futures){ val result = future.get() if(result.length > 0) println(result) } println(divNum(90,20)) println("任務執行完成哈哈") } }