1)Java线程模型围绕共享内存和锁建立的,特别是系统在大小和复杂度都相应得到提升的时候,这种模型面临挑战。如资源竞争或者是潜在的死锁,软件测试也不一定测试出来,当投入到实际应用之后表现出来了,比较恰当的安全方案是消息传递架构列如Scala提供实质实现Erang行为类模型的附加库。

   2) 什么是行为类?它是能够实现于线程之上的并发抽象。它们通过彼此间发送消息实现通信。每个行为类都能实现二个基本操作,消息的发送和接受。发送操作,用一个!号表示(注意:!不是Scala内建操作符),发送消息给一个行为类。那样可以命名recipient的行为类表示,如recipient ! msg. 至于发送的是异步,发送的行为类可以在一瞬间完成,不等待消息被接受和处理。好比说没一个行为类都有一个信箱,把进入的消息排成队列,行为类中可以通过receive代码块处理信箱中受到的消息,代码如下:

receive{

case M1=>..//handle M1

case M2=>..//handle M2

}

解析下上面的伪代码,接收代码块由许多case语句组成,么一个都用一个消息模板查询信箱。信箱中第一个符合任何case的消息被选中,并且执行相应的动作。如信箱中不存在任何符合case消息,行为类将休眠等待新的进的消息。

3)一个经典Scala行为类实现检查值计算服务列子,代码如下:

actor{

var sum=0

loop{

receive{

case Data(bytes)=>sum+=hash(bytes)

case GetSum(requester)=>requester ! sum

}

}

}

解析下,第一步定义了sum本地变量,赋值为0 ,之后用receive段落重复等待在消息循环中。如收到Data消息,就要把发送的bytes取哈希值加到sum 变量中。如收到GetSum消息,就用消息发送requester ! sum将当前sum值发回给requester了。requester域嵌入在GetSum消息里,它一般指出创建请求的行为类。如果不太明白的话,可以多看些资料。