just a scala actor demo

本文通过Scala Actors模型和Java多线程实现斐波那契数列计算,对比了两种不同语言处理并发任务的方式。Scala利用Actors简化了并发编程,而Java则通过创建大量线程来实现并行计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


import scala.actors._
import scala.actors.Actor._
import scala.util.Random
import java.util.Date

object Actors{
def main(args: Array[String]){
val actors = new Array[Actor](250000)
for(i <- 0 to 249999){
actors(i) = actor{
loop{
react{
case fibNum: Int => calculate(fibNum, i)
}
}
}
}
val random = new Random()
for(a <- actors){
a ! random.nextInt(25)
}
}

def calculate(fibNum: Int, i: Int) = {
val answer = fibonacci(fibNum)
if((i + 1) % 1000 == 0){
val idPlusOne = i + 1
println("The " + fibNum + "th fibonacci number is " + answer + " (thread: " + idPlusOne + ")")
}
if((i + 1) % 250000 == 0){
System.exit(0)
}
}

def fibonacci( n: Int): Int = n match {
case 0 => 0
case 1 => 1
case _ => fibonacci(n -1) + fibonacci(n - 2)
}
}


同等功能的java实现

import java.util.Date;
import java.util.Random;

public class JavaThreads extends Thread{

private static int THREAD_COUNT = 250000;
private int fibNum;
private int jid;

public JavaThreads(int id, int fibNum){
this.jid = id;
this.fibNum = fibNum;
}

public void run(){
int answer = fibonacci(fibNum);
if(this.jid % 1000 == 0){
System.out.println("The " + fibNum + "th fibonacci number is " + answer + " (thread: " + this.jid + ")");
}
}

private int fibonacci(int i){
if(i < 2){ return i;}
return fibonacci(i - 1) + fibonacci(i - 2);
}

public int getJid(){
return jid;
}

public void setJid(int jid){
this.jid = jid;
}

public int getFibNum(){
return fibNum;
}

public void setFibNum(int fibNum){
this.fibNum = fibNum;
}

public static void main(String args[]){
Date beginDate = new Date();
long memoryBegin = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
JavaThreads threads[] = new JavaThreads[THREAD_COUNT];
Random random = new Random();
for(int i = 0; i < THREAD_COUNT; i++){
threads[i] = new JavaThreads(i, random.nextInt(25));
}
for(JavaThreads thread : threads){
thread.start();
}

long memoryEnd = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
Date endDate = new Date();
System.out.println("Completed in " + ((endDate.getTime() - beginDate.getTime())/1000) + " seconds");
System.out.println("Used memory: " + (memoryEnd - memoryBegin));
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值