1.对于上一篇讲解的scala的一些补充

    val files = Array[String]("a.txt","b.txt","c.txt")

    for(f <- files){xxxx}

  目标一:熟悉Scala Actor并发编程

  目标二:为学习Akka做准备

    注:我们现在学的Scala Actor是scala 2.10.x版本及以前版本的Actor。

    Scala在2.11.x版本中将Akka加入其中,作为其默认的Actor,

    老版本的Actor已经废弃

   2.概念

    Scala中的Actor能够实现并行编程的强大功能,它是基于事件模型的

    并发机制,

    Scala是运用消息(message)的发送、接收来实现多线程的。

    使用Scala能够更容易地实现多线程应用的开发

   3.Actor方法执行顺序

    1.首先调用start()方法执行Actor

    2.调用start()方法后其act()方法会被执行

    3.向Actor发送消息

   4.wordCount的Actor的计算方法,虽然现在不用,但是思路还是有用的

    

  1. package main.cn.wj.test
  2. import scala.actors.{Actor, Future}
  3. import scala.collection.immutable.HashSet
  4. import scala.io.Source
  5. import scala.collection.mutable.ListBuffer
  6. /**
  7. * Created by WJ on 2016/12/22.
  8. */
  9.  
  10. class Task extends Actor{
  11. override def act(): Unit = {
  12. loop{
  13. react{
  14. case SubmitTask(filename) =>{
  15. val result = Source.fromFile(filename).getLines().flatMap(_.split(" ")).map((_,1)).toList.groupBy(_._1).mapValues(_.size)
  16. sender ! ResultTask(result)
  17. }
  18. case StopTask =>{
  19. exit()
  20. }
  21. }
  22. }
  23. }
  24. }
  25.  
  26. case class SubmitTask(filename:String)
  27.  
  28. case class ResultTask (result:Map[String,Int])
  29.  
  30. case object StopTask
  31.  
  32. object ActorWordCount {
  33. def main(args: Array[String]): Unit = {
  34. var replySet = new HashSet[Future[Any]]()
  35. val resultList = new ListBuffer[ResultTask]
  36. val files = Array[String]("E://Test/words.log", "E://Test/words.txt")
  37. for (f <- files) {
  38. val actor = new Task
  39. val reply = actor.start() !! SubmitTask(f) //<reply 等同于Future>
  40. replySet += reply
  41. }
  42. while(replySet.size > 0 ){
  43. val toCompute = replySet.filter(_.isSet)
  44. for(f <- toCompute) {
  45. val result = f.apply().asInstanceOf[ResultTask]
  46. resultList += result
  47. replySet -= f
  48. }
  49. Thread.sleep(100)
  50. }
  51.  
  52. // reduce功能 ,汇总
  53. //List
  54. val fr = resultList.flatMap(_.result).groupBy((_._1)).mapValues(_.foldLeft(0)(_+_._2))
  55. println(fr)
  56. }
  57. }

  5.看了上面的关于多线程相关的知识点,看看我们的线程池的代码

  

  1. package main.cn.wj.test
  2.  
  3. import java.util.concurrent.{Executor, Executors}
  4.  
  5. /**
  6. * Created by WJ on 2016/12/22.
  7. */
  8. object ThreadDemo {
  9. def main(args: Array[String]): Unit = {
  10. val pool = Executors.newFixedThreadPool(5);
  11. for (i <- 1 to 10){
  12. pool.execute(new Runnable {
  13. override def run(): Unit = {
  14. println(Thread.currentThread().getName)
  15. Thread.sleep(1000)
  16. }
  17. })
  18. }
  19. }
  20. }

scala Actor -03的更多相关文章

  1. Scala Actor入门

    介绍 Scala的Actor类似于Java中的多线程编程.但是不同的是,Scala的Actor提供的模型与多线程有所不同.Scala的Actor尽可能地避免锁和共享状态,从而避免多线程并发时出现资源争 ...

  2. scala actor编程之对象传递

    scala 最吸引人的一点就是actor并发编程了.但是纵观scala官方文档,baidu文档,IBM文档都写的通过字符串传呀传,如果用作actor编程说明当然没有问题.但是在正式开放中,光传字符串就 ...

  3. 大数据系列修炼-Scala课程03

    前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Sca ...

  4. Scala actor的使用

    Actor 为什么需要Actor? Actor的本质即万物皆Actor, Actor之间只有发送消息这一种通信方式.例如,无论是管理员让工作者干活,还是工作者把成果交还给管理员,它们之间也要通过发送消 ...

  5. scala Actor Akka

    推荐博客:过往记忆 https://www.iteblog.com/archives/1154.html akka.io

  6. Scala面向对象03

  7. Scala语法03 - 函数

  8. Scala 深入浅出实战经典 第68讲:Scala并发编程原生线程Actor、Cass Class下的消息传递和偏函数实战解析

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...

  9. Scala 深入浅出实战经典 第67讲:Scala并发编程匿名Actor、消息传递、偏函数解析

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

随机推荐

  1. Android 应用监听自身卸载,弹出用户反馈调查

    监听卸载情景和原理分析 1,情景分析 在上上篇博客中我写了一下NDK开发实践项目,使用开源的LAME库转码MP3,作为前面几篇基础博客的加深理解使用的,但是这样的项目用处不大,除了练练NDK功底.这篇 ...

  2. uLua学习之HelloWorld(一)

    前言 好久都没有写过文章了,现在正好在看有关unity3d的热更新方案,在网上找了很久,发现了ulua这个插件,感觉还是不错的,反正自己是个初学者,多了解一些知识应该是没有什么问题的.说起ulua,就 ...

  3. win10 安装mysql zip 压缩包版

    从官网下载zip https://www.mysql.com/downloads/ 解压 D:\devtool\mysql-5.7.17-winx64\ 将  D:\devtool\mysql--wi ...

  4. sudoer解释

    /etc/sudoer ## Sudoers allows particular users to run various commands as ## the root user, without ...

  5. dell Nx000系列交换机

    dell n2048(P) dell n3048(P) dell n4064(F) P: PoE+ F: SFP+ Model GbE 10GbE(SFP+) 40GbE(QSFP+) Layer d ...

  6. centos6.5_64bit_tomcat7开机自启

    一.创建tomcat脚本 vim /etc/init.d/tomcat 将下面的内容拷到脚本里面 =================================================== ...

  7. des的根据key进行加密和解密方法

    DES加密: public static string DESEncode(string content, string key) { DESCryptoServiceProvider des = n ...

  8. Ubuntu 16.04 安装札记

    写在前面的话:第一次写,有点紧张,不知道怎么写,就胡乱写了,主要是写给自己看的,感觉这里大神遍地都是,大牛更是数不胜数,我就一小白,记下来怕以后忘了,言归正传,我初步打算是把这篇博客写成安装指南(捂脸 ...

  9. VPS 运行 Node.js 的一些经验

    VPS 系统选择 各系统安装难易对比 Ubuntu.Debian 较为简单,CentOS 稍麻烦,32位系统比64位更节省内存 DigitalOcean 甚至推出了 Ubuntu + Node.js ...

  10. 2018.7.22 Jdom与dom的区别

    SAX 优点:①无需将整个文档加载到内存,因而内存消耗少 ②推模型允许注册多个ContentHandler 缺点:①没有内置的文档导航支持 ②不能够随机访问XML文档 ③不支持在原地修改XML ④不支 ...