本篇内容介绍了“Scala的核心程序模块是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
读完ManyClients.scala之后,基本上对Scala有一个大致的印象了,接着我们就开始读Scala的核心程序模块,从src/main/scala/net/kestrel开始。
需要介绍一些scala的package:
…… import java.util.concurrent._ import scala.actors.{Actor, Scheduler} import scala.actors.Actor._ import scala.collection.mutable import org.apache.mina.core.session.IoSession ……
在Scala里面主要用到了几个开发包,java.util.concurrent是Java 5.0平台上的多线程框架。org.apache.mina是Apache Mina提供的NIO开发包,因为走读主要是为了了解Scala,所以就不多说这两个包了,让我们着重说一下scala的一个非常有用的多线程核心包actor。
actor,在Scala中几乎占到了非常核心的地位(可以说就是Scala的核心)。有很多人几乎是同时听到actor和scala的。或者是因为scala有了actor,才决定用scala的。当然,scala不仅仅有actor,在后面的代码中,你可以看到许多语言的设计,都使得actor的设计近乎***,简洁的,可读性很高的代码,可以完成非常多的工作。
不过还是让我们从简单的actor开始吧,一个完整的actor写法如下:
import scala.actors.Actor class Redford extends Actor { def act() { println("A lot of what acting is, is paying attention.") } } val robert = new Redford robert.start
Redford继承一个Actor的类(关于class和object在Scala的区别,我们稍后再说),它有一个函数,也就是线程运行的内容叫做act(),当线程启动之后,就会执行这个act()函数。需要调用这个线程的时候,创建这个对象,然后调用robert.start线程就启动了。
这个写法其实没有太多的精细,只是比Java的写法少敲了一些键盘而已。这倒是没有什么错,但是往下看,我们多import进来一个package,就可以这样写了:
import scala.actors.Actor import scala.actors.Actor._ val paulNewman = actor { println("To be an actor, you have to be a child.") }
直接启动一个线程,处理一个分支的业务。大括号里面的就是act()的函数体。再回过来看Kestrel的代码:
private val deathSwitch = new CountDownLatch(1) …… def startup(config: Config): Unit = { …… // make sure there's always one actor running so scala 2.7.2 // doesn't kill off the actors library. actor { deathSwitch.await } …… } def shutdown(): Unit = { …… deathSwitch.countDown }
注意那句注释,在startup系统中多开一个线程,让服务可以一直运行着……直到shutdown。
回过来我们说一下class和object的区别:
1. 对于Scala的编译器来看,class不支持任何的static变量,在使用class的时候,必须要先用new来创建实例。而object可以看做是一个只有static内容的Java类,所以对它的调用不需要创建,直接调用即可。
2. 在设计模式里面,object可以看做是一个Singleton,也就是单例模式。所以在调用的时候,就不需要象Java一样,老是要getInstance来获取句柄了。
当我们看到PersistentQueue.scala的时候,一个文件中同时包含了class PersistentQueue和object PersistentQueue。就比较容易了解class和object的用法了。
“Scala的核心程序模块是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。