scala Actor -03
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的更多相关文章
- Scala Actor入门
介绍 Scala的Actor类似于Java中的多线程编程.但是不同的是,Scala的Actor提供的模型与多线程有所不同.Scala的Actor尽可能地避免锁和共享状态,从而避免多线程并发时出现资源争 ...
- scala actor编程之对象传递
scala 最吸引人的一点就是actor并发编程了.但是纵观scala官方文档,baidu文档,IBM文档都写的通过字符串传呀传,如果用作actor编程说明当然没有问题.但是在正式开放中,光传字符串就 ...
- 大数据系列修炼-Scala课程03
前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Sca ...
- Scala actor的使用
Actor 为什么需要Actor? Actor的本质即万物皆Actor, Actor之间只有发送消息这一种通信方式.例如,无论是管理员让工作者干活,还是工作者把成果交还给管理员,它们之间也要通过发送消 ...
- scala Actor Akka
推荐博客:过往记忆 https://www.iteblog.com/archives/1154.html akka.io
- Scala面向对象03
- Scala语法03 - 函数
- Scala 深入浅出实战经典 第68讲:Scala并发编程原生线程Actor、Cass Class下的消息传递和偏函数实战解析
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...
- Scala 深入浅出实战经典 第67讲:Scala并发编程匿名Actor、消息传递、偏函数解析
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
随机推荐
- JavaScript精简代码 非一般的写法(转载)
摘要:最近在编写一个前端模块功能,编写了大量的代码,其中一般图片特效展示是参考别人的代码来写的,发现有些代码似乎看得明白又好像不确定是不是哪个意思,所以在网上问了一下程序员们,原来是JS代码简写. 转 ...
- Java Knowledge series 2
JVM Analysis & Design The object-oriented paradigm is a new and different way of thingking about ...
- 快速排序c语言实现
#include <stdio.h> void quick_sort(int* a, int n) { ) return; int i,j,tmp,k; k = a[n/]; ,j = n ...
- FragmentPagerAdapter 与 FragmentStatePagerAdapter的区别。通过验证证明的。
在一个 Android 应用中,我使用 FragmentPagerAdapter 来处理多 Fragment 页面的横向滑动.不过我碰到了一个问题,即当 Fragment 对应的数据集发生改变时,我希 ...
- 【工作中学习】CreateProcessAsUser失败,错误码:1314
事情起因是这样, 产品的Windows服务(Service)之前一直是用Local System Account在运行的,但这个版本有需求要换成使用普通的Domain User来运行,如下图: 但却出 ...
- C语言问题集
征服C指针:P70#include "stdio.h" char *int_to_str(int int_value){ static char buf[20]; sprintf( ...
- python网络编程-paramiko模块
paramiko模块 该模块基于SSH用于连接远程服务器并执行相关操作 参考文档 SSHClient 用于连接远程服务器并执行命令 import paramiko #创建SSH对象 ssh = par ...
- Struts2_用Action的属性接收参数
先在 Action 中定义要接收的属性,需要编写属性的getter 和 setter 方法 struts2 会自动帮我们把 String 类型的参数转为 Action 中相对应的数据类型. priva ...
- Python基础学习-列表基本操作
列表:Python的“苦力”. 列表不同于元组和字条串的地方:列表是可变的——可以改变列表的内容,并且列表有很多有用的.专门的方法. 1.list函数 因为字符串不能像列表一样被修改,所有有时根 ...
- Axure 8 Tab制作
1 在[页面]面板中选中[page1] 2 在[元件库]中选中[动态面板],并拖拽到[设计区域]中 3 双[设计区域]中的动态面板,打开[动态面板管理]页面 4 在[动态面板管理]页面中输入动态面板的 ...