Scala语法(五) Actor与线程池

2024-05-14 07:58
文章标签 线程 语法 scala actor

本文主要是介绍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与线程池的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/988197

相关文章

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

Mysql用户授权(GRANT)语法及示例解读

《Mysql用户授权(GRANT)语法及示例解读》:本文主要介绍Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql用户授权(GRANT)语法授予用户权限语法GRANT语句中的<权限类型>的使用WITH GRANT

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5