日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
從Kestrel看Scala的核心程序模塊

之前曾介紹過(guò)Kestrel這個(gè)Scala實(shí)例教程,這個(gè)代碼實(shí)例在Twitter中也有用到,相當(dāng)于Ruby中的Starling。有關(guān)Kestrel還有很多其他的細(xì)節(jié),下面繼續(xù)介紹Scala的核心程序模塊,Scala的開發(fā)包以及Scala Actor。

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站制作、濟(jì)寧網(wǎng)絡(luò)推廣、小程序設(shè)計(jì)、濟(jì)寧網(wǎng)絡(luò)營(yíng)銷、濟(jì)寧企業(yè)策劃、濟(jì)寧品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供濟(jì)寧建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com

讀完ManyClients.scala之后,基本上對(duì)Scala有一個(gè)大致的印象了,接著我們就開始讀Scala的核心程序模塊,從src/main/scala/net/kestrel開始。

需要介紹一些scala的package:

 
 
 
  1. ……  
  2. import java.util.concurrent._  
  3. import scala.actors.{Actor, Scheduler}  
  4. import scala.actors.Actor._  
  5. import scala.collection.mutable  
  6. import org.apache.mina.core.session.IoSession  
  7. ……  

#t#在Scala里面主要用到了幾個(gè)開發(fā)包,java.util.concurrent是Java 5.0平臺(tái)上的多線程框架。org.apache.mina是Apache Mina提供的NIO開發(fā)包,因?yàn)樽咦x主要是為了了解Scala,所以就不多說(shuō)這兩個(gè)包了,讓我們著重說(shuō)一下scala的一個(gè)非常有用的多線程核心包actor。

actor,在Scala中幾乎占到了非常核心的地位(可以說(shuō)就是Scala的核心)。有很多人幾乎是同時(shí)聽到actor和scala的?;蛘呤且?yàn)閟cala有了actor,才決定用scala的。當(dāng)然,scala不僅僅有actor,在后面的代碼中,你可以看到許多語(yǔ)言的設(shè)計(jì),都使得actor的設(shè)計(jì)近乎***,簡(jiǎn)潔的,可讀性很高的代碼,可以完成非常多的工作。

不過(guò)還是讓我們從簡(jiǎn)單的actor開始吧,一個(gè)完整的actor寫法如下:

 
 
 
  1. import scala.actors.Actor  
  2. class Redford extends Actor {  
  3.   def act() {  
  4.     println("A lot of what acting is, is paying attention.")  
  5.   }  
  6. }  
  7. val robert = new Redford  
  8. robert.start  

Redford繼承一個(gè)Actor的類(關(guān)于class和object在Scala的區(qū)別,我們稍后再說(shuō)),它有一個(gè)函數(shù),也就是線程運(yùn)行的內(nèi)容叫做act(),當(dāng)線程啟動(dòng)之后,就會(huì)執(zhí)行這個(gè)act()函數(shù)。需要調(diào)用這個(gè)線程的時(shí)候,創(chuàng)建這個(gè)對(duì)象,然后調(diào)用robert.start線程就啟動(dòng)了。

這個(gè)寫法其實(shí)沒有太多的精細(xì),只是比Java的寫法少敲了一些鍵盤而已。這倒是沒有什么錯(cuò),但是往下看,我們多import進(jìn)來(lái)一個(gè)package,就可以這樣寫了:

 
 
 
  1. import scala.actors.Actor  
  2. import scala.actors.Actor._  
  3. val paulNewman = actor {  
  4.   println("To be an actor, you have to be a child.")  
  5. }  

直接啟動(dòng)一個(gè)線程,處理一個(gè)分支的業(yè)務(wù)。大括號(hào)里面的就是act()的函數(shù)體。再回過(guò)來(lái)看Kestrel的代碼:

 
 
 
  1. private val deathSwitch = new CountDownLatch(1)  
  2. ……  
  3. def startup(config: Config): Unit = {  
  4.     ……  
  5.     // make sure there's always one actor running so scala 2.7.2  
  6.     // doesn't kill off the actors library.  
  7.     actor {  
  8.       deathSwitch.await  
  9.     }  
  10.     ……  
  11. }  
  12. def shutdown(): Unit = {  
  13.     ……  
  14.     deathSwitch.countDown  
  15. }  

注意那句注釋,在startup系統(tǒng)中多開一個(gè)線程,讓服務(wù)可以一直運(yùn)行著……直到shutdown。

回過(guò)來(lái)我們說(shuō)一下class和object的區(qū)別:

1. 對(duì)于Scala的編譯器來(lái)看,class不支持任何的static變量,在使用class的時(shí)候,必須要先用new來(lái)創(chuàng)建實(shí)例。而object可以看做是一個(gè)只有static內(nèi)容的Java類,所以對(duì)它的調(diào)用不需要?jiǎng)?chuàng)建,直接調(diào)用即可。

2. 在設(shè)計(jì)模式里面,object可以看做是一個(gè)Singleton,也就是單例模式。所以在調(diào)用的時(shí)候,就不需要象Java一樣,老是要getInstance來(lái)獲取句柄了。

當(dāng)我們看到PersistentQueue.scala的時(shí)候,一個(gè)文件中同時(shí)包含了class PersistentQueue和object PersistentQueue。就比較容易了解class和object的用法了。


本文標(biāo)題:從Kestrel看Scala的核心程序模塊
URL鏈接:http://m.5511xx.com/article/dppihdc.html