Scala求因子

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("任務執行完成哈哈")


  }

}
相關文章
相關標籤/搜索