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

相关文章

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

Java中如何正确的停掉线程

《Java中如何正确的停掉线程》Java通过interrupt()通知线程停止而非强制,确保线程自主处理中断,避免数据损坏,线程池的shutdown()等待任务完成,shutdownNow()强制中断... 目录为什么不强制停止为什么 Java 不提供强制停止线程的能力呢?如何用interrupt停止线程s

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

SpringBoot实现虚拟线程的方案

《SpringBoot实现虚拟线程的方案》Java19引入虚拟线程,本文就来介绍一下SpringBoot实现虚拟线程的方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录什么是虚拟线程虚拟线程和普通线程的区别SpringBoot使用虚拟线程配置@Async性能对比H

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL