本文主要是介绍Scala语法(五) Actor与线程池,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
在前面的章节内, 我们介绍了Scala基础、集合、方法与函数体, 以及模式匹配的相关知识. 本章简单的介绍了Actor的相关知识.
正文
- 创建Actor
个人理解Actor
对象与Java内的Thread
对象相似. 创建时通过继承的方式创建Actor
类, 并通过start()
方法启动Actor
子线程.
import scala.actors.Actor/*** 使用Actor的方式启动线程.* 1. 调用start()方法启动Actor* 2. 调用start()方法后, act方法会被执行* 3. 向Actor发送消息.* * | 发送异步消息 没有返回值* |? 发送同步消息,等待返回值* |! 发送异步消息,返回值为Future[Any]* */
// Actor已经2.11.x版本已经被移除了 使用的是Akka内的Actor.
object QuickActorA extends Actor{def act(){for( i <- 1 to 100){println("actor1-"+i)Thread.sleep(1000)}}
}
object QuickActorB extends Actor{def act(){for( i <- 1 to 100){println("actor2-"+i)Thread.sleep(1000)}}
}
object QucikActor {def main(args: Array[String]): Unit = {QuickActorA.start()QuickActorB.start()}
}
- 持久通信
import scala.actors.Actor/*** Actor不断的接收消息.* * */
class QuickActorReceiveA extends Actor {def act():Unit = {while(true){receive{case "start" => {println("Start")}case "stop" => {println("Stop")}}}}
}
object QuickActorReceive {def main(args: Array[String]): Unit = {val actor = new QuickActorReceiveA()actor.start()actor ! "start"actor ! "stop"}
}
- React方法通信
import scala.actors.Actorclass QuickActorReactA extends Actor {def act():Unit ={loop{// 复用线程池react{case "start" => {println("start"); Thread.sleep(1000); }case "stop" => {println("stop") ;Thread.sleep(1000);}case "exit" => {exit()}}}}
}
object QuickActorReact {def main(args: Array[String]): Unit = {val quickActorReactA = new QuickActorReactA()quickActorReactA.start()quickActorReactA ! "start"quickActorReactA ! "stop"quickActorReactA ! "exit"}
}
- 创建线程池(Java)
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;/**** Java内进行线程池声明代码.*/
public class QuickJavaThreadPool {public static void main(String[] args) {// 定义线程池 并向其中塞任务ExecutorService pool = Executors.newCachedThreadPool();for(int i=0;i<10;i++) {pool.execute(new Runnable() {@Overridepublic void run() {System.out.println("Thread Name:"+Thread.currentThread().getName());try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});}Future<Integer> future = pool.submit(new Callable<Integer>() {@Overridepublic Integer call() throws Exception {return 1;}});// pool.shutdown();}
}
- 创建线程池(Scala)
import java.util.concurrent.Executors
import java.util.concurrent.Future
import java.util.concurrent.Callable/*** 在Scala内使用线程池技术 创建 线程池.**/
object QuickThreadPool {def main(args: Array[String]): Unit = {val pool = Executors.newCachedThreadPool()for (i <- 1 to 10) {pool.execute(new Runnable() {def run(): Unit = {println("Thread-Name:" + Thread.currentThread().getName())Thread.sleep(1000)}})}val future:Future[Int] = pool.submit(new Callable[Int](){override def call():Int ={Thread.sleep(1000)100}}) var status = future.isDone()Thread.sleep(1000)status = future.isDone()if(status){println(future.get())}
// pool.shutdown()}
}
这篇关于Scala语法(五) Actor与线程池的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!