成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從Kestrel看Scala的核心程序模塊

開發 后端
本文解讀了Scala的核心程序模塊。在幾個Scala開發包中,Scala Actor可以說是最核心的,而很多人都是因為Scala有actor才決定使用Scala的。

之前曾介紹過Kestrel這個Scala實例教程,這個代碼實例在Twitter中也有用到,相當于Ruby中的Starling。有關Kestrel還有很多其他的細節,下面繼續介紹Scala的核心程序模塊,Scala的開發包以及Scala Actor。

讀完ManyClients.scala之后,基本上對Scala有一個大致的印象了,接著我們就開始讀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里面主要用到了幾個開發包,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寫法如下:

  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繼承一個Actor的類(關于class和object在Scala的區別,我們稍后再說),它有一個函數,也就是線程運行的內容叫做act(),當線程啟動之后,就會執行這個act()函數。需要調用這個線程的時候,創建這個對象,然后調用robert.start線程就啟動了。

這個寫法其實沒有太多的精細,只是比Java的寫法少敲了一些鍵盤而已。這倒是沒有什么錯,但是往下看,我們多import進來一個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. }  

直接啟動一個線程,處理一個分支的業務。大括號里面的就是act()的函數體。再回過來看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系統中多開一個線程,讓服務可以一直運行著……直到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的用法了。

【編輯推薦】

  1. 走讀Kestrel,了解Scala
  2. Scala實例教程:Kestrel
  3. 從Scala看canEqual與正確的的equals實現
  4. Java:所有的equals方法實現都是錯誤的?
  5. Scala編程語言
責任編輯:yangsai 來源: dingsding
相關推薦

2009-09-22 10:15:42

PersistentQScala

2009-09-22 09:59:40

QueueCollecScala

2009-09-18 11:44:05

Scala實例教程Kestrel

2009-06-10 11:47:32

Android應用程序模塊

2009-09-28 11:25:17

PersistentQKestrelScala

2009-09-28 11:42:21

KestrelScala

2009-09-28 11:37:03

Journal.scaKestrel

2009-09-28 10:26:12

Scala代碼實例Kestrel

2009-09-15 18:27:59

equals實現canEqualScala

2024-03-27 13:33:00

MySQLInnoDB事務

2009-06-15 15:33:13

ScalaTwitter

2009-08-21 16:17:25

ScalaTwitter API

2009-09-28 11:01:39

從Java走進Scal

2009-12-09 09:15:47

從Java走進ScalTwitter API

2022-01-11 09:38:22

數倉場景趨勢

2009-06-16 17:54:38

Scala類語法語義

2009-06-17 11:44:22

Scala控制結構

2009-07-22 07:53:00

Scala擴展類

2009-02-04 17:32:03

ibmdwJavaScala

2014-04-09 09:42:30

ScalaJVM
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩在线观看一区二区三区 | 99精品一区二区三区 | 超碰在线国产 | 综合久久99| 久久久久久久久久久久久91 | 在线视频日韩 | 欧美精 | 台湾av在线 | 久久精品91久久久久久再现 | 国产一区二区三区四区五区加勒比 | 亚洲国产成人精品女人 | 亚洲天堂成人在线视频 | 国产1区2区3区| 国产精品久久久久久吹潮 | 亚洲三级在线 | 中文字幕在线视频免费观看 | 一区二区三区四区在线免费观看 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 免费a网| 亚洲欧美国产一区二区三区 | 国产夜恋视频在线观看 | 久久成人国产 | www日日日 | 91在线电影 | 色天堂影院 | 一区二区三区免费 | 91精品国产一区二区三区 | 欧美精品一区二区在线观看 | 性一交一乱一伦视频免费观看 | 国内精品久久久久久影视8 最新黄色在线观看 | 国产一区二区三区免费 | 国产精品视频 | 国产精品久久久久久福利一牛影视 | 成人精品一区亚洲午夜久久久 | 国产视频精品免费 | 日韩免费一区二区 | 亚洲在线一区二区 | 亚洲网站在线播放 | 欧美a√ | 欧美日韩精品久久久免费观看 | 欧美成人一区二免费视频软件 |