大数据系列修炼-Scala课程69
来源:互联网 发布:帝国cms小说 编辑:程序博客网 时间:2024/05/21 14:57
大数据系列修炼-Scala课程69
核心内容:
1、Scala并发编程之react、loop的相关用法操作代码实战
1、Scala并发编程之react、loop操作代码实战
1>在Java当中,所谓执行一个线程,就是执行本线程所对应的run方法,若run方法里面的代码执行完毕,这个线程就会结束,此时线程默认就会得到回收(销毁),因此为了使线程得到重用,即不被销毁、回收,我们常常将run方法里面的代码块加上一个循环。
2>所谓线程重用就是一个线程执行完毕之后,这个线程并没有立即被销毁、回收,而是可以继续被使用。
3>在Java当中,线程重用的具体方式是run方法里面的代码加上循环,在Scala当中,线程重用的方式就是Actor通过while(true)或者loop循环不断的关联自己的邮箱,使自己的邮箱不断的处于循环状态。
4>在scala当中,使用react与loop的方式使线程得到重用。
5>在scala当中,receive方法通过while(true)或loop循环实现线程的重用,不断的关联自己的邮箱;react方法通过再次调用act方法或
者loop循环(while(true)不行)实现线程的重用,具体表现为通过act()方法可以重新关联Actor的邮箱。
6>loop可以循环调用react或者receive来处理邮箱中的信息,通过loop方法,可以简化react方法的调用
7>react偏函数通过模式匹配处理完一条消息之后会导致act方法自身的退出,进而导致线程注销,通过调用act()方法可以重
新关联Actor的邮箱
实例程序1:Java当中常用while(true)方式使线程得到重用–即为run方法里面的代码块加上一个循环。
class A extends Thread{ public void run() //所谓执行一个线程,就是执行本线程所对应的run方法 { while(true) { for(int i=0;i<10;i++) { System.out.println("Step:"+i); try { Thread.sleep(500); } catch (Exception e) {} } } }}class App1{ public static void main(String[] args) { A aa = new A(); aa.start();//向下开辟一个新的线程,并执行本线程所对应的run方法 }}
运行结果:下面的代码将不断的进行循环,防止线程死掉
Step:0Step:1Step:2Step:3Step:4Step:5Step:6Step:7Step:8Step:9
实例程序2:receive方法通过while(true)或loop循环实现线程的重用
case class B(name:String,score:Double)class A extends Actor{ def act()= { while(true) //receive通过while(true)不断循环自己的邮箱 { receive { case msg:String => println("String is:" + msg) case msg:Double => println("Double is:" + msg) case B(name,score) => println(name + "\t" + score) case _ => println("Nothing!") } } }}object App1 { def main(args:Array[String]):Unit= { val aa = new A() aa.start() aa ! 20.0 aa ! "Spark" aa ! new B("Hadoop",89) }}
运行结果:
Double is:20.0String is:SparkHadoop 89.0
如果上面的程序没有while(true),则运行结果为:
Double is:20.0
实例程序3:react方法通过再次调用act方法或者loop循环(while(true)不行)实现线程的重用
case class B(name:String,score:Double)class A extends Actor{ def act()= { react //不断的调用act方法才能实现邮箱的重复运作 { case msg:String => println("String is:" + msg) act() case msg:Double => println("Double is:" + msg) act() case B(name,score) => println(name + "\t" + score) act() case _ => println("Nothing!") act() } }}object App1 { def main(args:Array[String]):Unit= { val aa = new A() aa.start() aa ! 20.0 aa ! "Spark" aa ! new B("Hadoop",89) }}
实例程序4:通过loop方法,可以简化react方法的调用
case class B(name:String,score:Double)class A extends Actor{ def act()= { loop //receive通过while(true)不断循环自己的邮箱 { react { case msg:String => println("String is:" + msg) case msg:Double => println("Double is:" + msg) case B(name,score) => println(name + "\t" + score) case _ => println("Nothing!") } } }}object App1 { def main(args:Array[String]):Unit= { val aa = new A() aa.start() aa ! 20.0 aa ! "Spark" aa ! new B("Hadoop",89) }}
如有问题,欢迎留言指正!
- 大数据系列修炼-Scala课程69
- 大数据系列修炼-Scala课程01
- 大数据系列修炼-Scala课程02
- 大数据系列修炼-Scala课程03
- 大数据系列修炼-Scala课程04
- 大数据系列修炼-Scala课程05
- 大数据系列修炼-Scala课程06
- 大数据系列修炼-Scala课程07
- 大数据系列修炼-Scala课程08
- 大数据系列修炼-Scala课程09
- 大数据系列修炼-Scala课程10
- 大数据系列修炼-Scala课程11
- 大数据系列修炼-Scala课程12
- 大数据系列修炼-Scala课程15
- 大数据系列修炼-Scala课程17
- 大数据系列修炼-Scala课程18
- 大数据系列修炼-Scala课程19
- 大数据系列修炼-Scala课程20
- Edit with Markdown in CSDN
- python2.7 httplib, urllib, urllib2, requests 库的简单使用
- 移动互联网终端的touch事件,touchstart, touchend, touchmove
- Java学习总结第十五天Java多态性
- Linux常用命令-------软件包
- 大数据系列修炼-Scala课程69
- Java中只有值传递,而不存在引用传递
- 获取前端网页 php爬虫 get_html.php
- 企业内部信息安全管理——(一)风险识别和管控
- UOJ 184 [ZJOI2016]旅行者
- #软工的小小萌新
- 多线程学习总结(一)——认识多线程
- The server quit without updating PID file (/var/run/mysqld/mysqld.pid). ...
- POJ 2187 Beauty Contest (平面最远点对 凸包+旋转卡壳 推荐)