本篇內(nèi)容介紹了“Scala的核心程序模塊是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡程序員、網(wǎng)頁設計師等,應用各種網(wǎng)絡程序開發(fā)技術(shù)和網(wǎng)頁設計技術(shù)配合操作的協(xié)同工作。成都創(chuàng)新互聯(lián)專業(yè)提供成都網(wǎng)站設計、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站制作(企業(yè)站、響應式網(wǎng)站開發(fā)、電商門戶網(wǎng)站)等服務,從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗的提升,我們力求做到極致!
讀完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里面主要用到了幾個開發(fā)包,java.util.concurrent是Java 5.0平臺上的多線程框架。org.apache.mina是Apache Mina提供的NIO開發(fā)包,因為走讀主要是為了了解Scala,所以就不多說這兩個包了,讓我們著重說一下scala的一個非常有用的多線程核心包actor。
actor,在Scala中幾乎占到了非常核心的地位(可以說就是Scala的核心)。有很多人幾乎是同時聽到actor和scala的?;蛘呤且驗閟cala有了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的區(qū)別,我們稍后再說),它有一個函數(shù),也就是線程運行的內(nèi)容叫做act(),當線程啟動之后,就會執(zhí)行這個act()函數(shù)。需要調(diào)用這個線程的時候,創(chuàng)建這個對象,然后調(diào)用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.") }
直接啟動一個線程,處理一個分支的業(yè)務。大括號里面的就是act()的函數(shù)體。再回過來看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系統(tǒng)中多開一個線程,讓服務可以一直運行著……直到shutdown。
回過來我們說一下class和object的區(qū)別:
1. 對于Scala的編譯器來看,class不支持任何的static變量,在使用class的時候,必須要先用new來創(chuàng)建實例。而object可以看做是一個只有static內(nèi)容的Java類,所以對它的調(diào)用不需要創(chuàng)建,直接調(diào)用即可。
2. 在設計模式里面,object可以看做是一個Singleton,也就是單例模式。所以在調(diào)用的時候,就不需要象Java一樣,老是要getInstance來獲取句柄了。
當我們看到PersistentQueue.scala的時候,一個文件中同時包含了class PersistentQueue和object PersistentQueue。就比較容易了解class和object的用法了。
“Scala的核心程序模塊是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!