package com.wanji.scala.test

import javax.swing.text.AbstractDocument.Content

import scala.actors.Actor

case class Hello(name:String,content:String,send:Actor)
case class HelloBack(name:String,content: String,sender:Actor) /**
* 描述:Scala编程实战
* 作者: sunrunzhi
* 时间: 2018/11/22 09:23
*/ class HelloActor extends Actor{
var counter=0 override def act(): Unit ={
while(true) {
receive{
case content:String=>println(content)
case Hello(name,content,sender)=>{
println("HelloActor:"+name+" content:"+content+counter)
counter+=1
Thread.sleep(3000)
sender ! HelloBack(name,content,this)
}
} }
}
} class HelloBackActor(val helloActor: Actor) extends Actor{
var counter=0 override def act(): Unit = {
helloActor ! Hello("Spark","Love is here",this)
while (true){
receive{
case content:String=>println("Message:"+content)
case HelloBack(name,content,sender)=>{
println("HelloBackActor:"+name+" content:"+content+counter)
counter+=1
Thread.sleep(3000)
sender ! Hello(name,content,this)
}
}
}
}
} object C17 { def main(args: Array[String]): Unit = {
val helloActor=new HelloActor
helloActor.start()//启动start来接收消息 val helloBackActor=new HelloBackActor(helloActor)
helloBackActor.start() var counter=0
while(true){
helloActor ! "Life is short,you need Spark!!!"+counter
counter +=1
Thread.sleep(3000) }
} }

  

package com.wanji.scala.test

import javax.swing.text.AbstractDocument.Content

import scala.actors.Actor

case class Hello(name:String,content:String,send:Actor)
case class HelloBack(name:String,content: String,sender:Actor) /**
* 描述:Scala编程实战
* 作者: sunrunzhi
* 时间: 2018/11/22 09:23
*/ class HelloActor extends Actor{
var counter=0 override def act(): Unit ={
while(true) {
receive{
case content:String=>println(content)
case Hello(name,content,sender)=>{
println("HelloActor:"+name+" content:"+content+counter)
counter+=1
Thread.sleep()
sender ! HelloBack(name,content,this)
}
} }
}
} class HelloBackActor(val helloActor: Actor) extends Actor{
var counter=0 override def act(): Unit = {
helloActor ! Hello("Spark","Love is here",this)
while (true){
receive{
case content:String=>println("Message:"+content)
case HelloBack(name,content,sender)=>{
println("HelloBackActor:"+name+" content:"+content+counter)
counter+=1
Thread.sleep()
sender ! Hello(name,content,this)
}
}
}
}
} object C17 { def main(args: Array[String]): Unit = {
val helloActor=new HelloActor
helloActor.start()//启动start来接收消息 val helloBackActor=new HelloBackActor(helloActor)
helloBackActor.start() var counter=0
while(true){
helloActor ! "Life is short,you need Spark!!!"+counter
counter +=1
Thread.sleep() }
} }

Scala实战高手****第17课:Scala并发编程实战及Spark源码阅读的更多相关文章

  1. 【并发编程】【JDK源码】J.U.C--AQS 及其同步组件(2/2)

    原文:慕课网高并发实战(七)- J.U.C之AQS 在[并发编程][JDK源码]AQS (AbstractQueuedSynchronizer)(1/2)中简要介绍了AQS的概念和基本原理,下面继续对 ...

  2. Scala实战高手****第8课:零基础实战Scala最常用数据结构Map和Tuple及Spark源码鉴赏

    本课内容1.Map和Tuple在Spark源码中的鉴赏2.Map和Tuple代码操作实战 ------------------------------------------------------- ...

  3. 【并发编程】【JDK源码】J.U.C--AQS (AbstractQueuedSynchronizer)(1/2)

    J.U.C实现基础 AQS.非阻塞数据结构和原子变量类(java.util.concurrent.atomic包中的类),concurrent包中的基础类都是使用这种模式来实现的.而concurren ...

  4. Scala实战高手****第6课 :零基础实战Scala集合操作及Spark源码解析

    本课内容1.Spark中Scala集合操作鉴赏2.Scala集合操作实战 --------------------------------------------------------------- ...

  5. Scala实战高手****第7课:零基础实战Scala面向对象编程及Spark源码解析

    /** * 如果有这些语法的支持,我们说这门语言是支持面向对象的语言 * 其实真正面向对象的精髓是不是封装.继承.多态呢? * --->肯定不是,封装.继承.多态,只不过是支撑面向对象的 * 一 ...

  6. 【并发编程】【JDK源码】CAS与synchronized

    线程安全 众所周知,Java是多线程的.但是,Java对多线程的支持其实是一把双刃剑.一旦涉及到多个线程操作共享资源的情况时,处理不好就可能产生线程安全问题.线程安全性可能是非常复杂的,在没有充足的同 ...

  7. 【并发编程】【JDK源码】J.U.C--线程池

    原文:慕课网实战·高并发探索(十四):线程池 Executor new Thread的弊端 每次new Thread 新建对象,性能差. 线程缺乏统一管理,可能无限制的新建线程,相互竞争,可能占用过多 ...

  8. Java并发编程笔记之ThreadLocalRandom源码分析

    JDK 并发包中 ThreadLocalRandom 类原理剖析,经常使用的随机数生成器 Random 类的原理是什么?及其局限性是什么?ThreadLocalRandom 是如何利用 ThreadL ...

  9. 多线程高并发编程(8) -- Fork/Join源码分析

    一.概念 Fork/Join就是将一个大任务分解(fork)成许多个独立的小任务,然后多线程并行去处理这些小任务,每个小任务处理完得到结果再进行合并(join)得到最终的结果. 流程:任务继承Recu ...

随机推荐

  1. php模式-数据映射模式

    概念:简言之,数据映射模式就是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作. 深入理解:数据映射,是在持久化数据存储层(一般是关系型数据库)和驻于内存的数据表现层之间进行双向数据 ...

  2. 使用vue做移动app时,调用摄像头扫描二维码

    现在前端技术发展飞快,前端都能做app了,那么项目中,也会遇到调用安卓手机基层的一些功能,比如调用摄像头,完成扫描二维码功能 下面我就为大家讲解一下,我在项目中调用这功能的过程. 首先我们需要一个中间 ...

  3. MyBatis的SQL语句映射文件详解(三)----多参数传递的几种方式

    1.单一基本类型参数(String,int等) 单一的基本类型参数,将对应语句中的parameterType的值与参数的类型相同.然后直接 用“#{参数名}” 来获取 java代码 //String类 ...

  4. Go 实现 soundex 算法

    [转]http://www.syyong.com/Go/Go-implements-the-soundex-algorithm.html SOUNDEX 返回由四个字符组成的代码 (SOUNDEX) ...

  5. vueJS 一天上手到精通

    近来用vuejs, vuejs和angular的不同在于它直接暴露了一个构造函数,而后在里面写各种config, 和模板再相对,而且vuejs也有对应的模板双向绑定机制,这样就使开发非常简单容易,虽然 ...

  6. node导入导出的问题

    node的每一个文件,都是一个域,那么里面所有的变量都不允许被外界引用,除非导出去.要使用外界的变量,也必须使用导入的方式导入进来. import 变量名 from '文件地址'//css可以直接导入 ...

  7. Invalidate()(转)

    原文转自 http://m.blog.csdn.net/blog/piaopiaopiaopiaopiao/41521211 使用Invalidate(TRUE)函数时,它会向消息队列中添加了WM_E ...

  8. django2.0的reverse

    导入: 官方文档地址:https://yiyibooks.cn/xx/Django_1.11.6/topics/http/urls.html from django.urls import rever ...

  9. 使用CloudSight API进行图像识别的Python脚本

    # -*- coding: utf-8 -*- # @Time : 2018/03/20 17:02 # @Author : cxa # @File : sss.py # @Software: PyC ...

  10. 配置iptables,把80端口转到8080

    在Linux的下面部署了tomcat,为了安全我们使用非root用户进行启动,但是在域名绑定时无法直接访问80端口号.众所周知,在unix下,非root用户不能监听1024以上的端口号,这个tomca ...