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的计算方法,虽然现在不用,但是思路还是有用的

    

package main.cn.wj.test
import scala.actors.{Actor, Future}
import scala.collection.immutable.HashSet
import scala.io.Source
import scala.collection.mutable.ListBuffer
/**
* Created by WJ on 2016/12/22.
*/ class Task extends Actor{
override def act(): Unit = {
loop{
react{
case SubmitTask(filename) =>{
val result = Source.fromFile(filename).getLines().flatMap(_.split(" ")).map((_,1)).toList.groupBy(_._1).mapValues(_.size)
sender ! ResultTask(result)
}
case StopTask =>{
exit()
}
}
}
}
} case class SubmitTask(filename:String) case class ResultTask (result:Map[String,Int]) case object StopTask object ActorWordCount {
def main(args: Array[String]): Unit = {
var replySet = new HashSet[Future[Any]]()
val resultList = new ListBuffer[ResultTask]
val files = Array[String]("E://Test/words.log", "E://Test/words.txt")
for (f <- files) {
val actor = new Task
val reply = actor.start() !! SubmitTask(f) //<reply 等同于Future>
replySet += reply
}
while(replySet.size > 0 ){
val toCompute = replySet.filter(_.isSet)
for(f <- toCompute) {
val result = f.apply().asInstanceOf[ResultTask]
resultList += result
replySet -= f
}
Thread.sleep(100)
} // reduce功能 ,汇总
//List
val fr = resultList.flatMap(_.result).groupBy((_._1)).mapValues(_.foldLeft(0)(_+_._2))
println(fr)
}
}

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

  

package main.cn.wj.test

import java.util.concurrent.{Executor, Executors}

/**
* Created by WJ on 2016/12/22.
*/
object ThreadDemo {
def main(args: Array[String]): Unit = {
val pool = Executors.newFixedThreadPool(5);
for (i <- 1 to 10){
pool.execute(new Runnable {
override def run(): Unit = {
println(Thread.currentThread().getName)
Thread.sleep(1000)
}
})
}
}
}

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. $.ajax显示进度条

  2. Design Pattern ->Prototype

    Layering & Contract Philosophy With additional indirection Prototype The example code is as foll ...

  3. Azure进阶攻略丨如何驾驭罢工的Linux虚机网卡?

    很多人的生活中,流传着一个屡试不爽,据说可以解决任何问题的百宝锦囊: 所以经常可以听到类似这样的对话: -我的电脑咋上不去网了? -重启一下电脑. -还是不行呢! -重启一下路由器. -怎么还不行-_ ...

  4. 基于FPGA的VGA显示设计(一)

    前言 FPGA主要运用于芯片验证.通信.图像处理.显示VGA接口的显示器是最基本的要求了. 原理 首先需要了解 : (1)VGA接口协议:VGA端子_维基百科 .VGA视频传输标准_百度 引脚1 RE ...

  5. 增量数据同步中间件DataLink分享(已开源)

    项目介绍 名称: DataLink['deitə liŋk]译意: 数据链路,数据(自动)传输器语言: 纯java开发(JDK1.8+)定位: 满足各种异构数据源之间的实时增量同步,一个分布式.可扩展 ...

  6. 1.10 从表中随机返回n条记录

    同时使用内置函数的rand函数. limit 和order by: select * from emp order by rand() limit 2;

  7. P1036 选数

    题目描述 已知 nn 个整数 x_1,x_2,…,x_nx1​,x2​,…,xn​,以及11个整数kk(k<nk<n).从nn个整数中任选kk个整数相加,可分别得到一系列的和.例如当n=4 ...

  8. 控制元素的div属性

    1.需求分析 改变元素的宽.高.颜色.显示.重置等属性. 2.技术分析 基础的css.html.js 3.详细分析 如图,单击按钮,改变元素属性: 3.1 HTML部分 根据视图不难发现,内容分两大不 ...

  9. rest_framwork组件

    rest framework介绍 (CBV(class base views)) 在开发REST API的视图中,虽然每个视图具体操作的数据不同,但增.删.改.查的实现流程基本套路化,所以这部分代码也 ...

  10. JAVAWEB开发中过滤器的概述及使用

    1.什么是过滤器? 过滤器是向WEB应用程序的请求和响应添加功能的WEB服务组件 2.过滤器的作用 1)可以统一的集中处理请求和响应 2)可以实现对请求数据的过滤 3.过滤器的工作方式 4.使用场合 ...