美文网首页
Scala编程基础30:Scala多线程

Scala编程基础30:Scala多线程

作者: 金字塔下的小蜗牛 | 来源:发表于2020-04-09 08:15 被阅读0次

进程是应用程序的执行过程;线程是比进程更小的执行单位。一个进程可以包含多个线程。这些线程共享父进程的资源。线程比进程更轻量级,有了多线程就可以实现并行化,即同一时刻可以有多个程序同时执行。

Scala的多线程用于开发并行的Scala应用程序。Scala不提供用于创建线程的任何单独的库。可以通过Java中的Thread类或者Runnable接口来创建线程,两者提供了线程的具体实现。

1.Scala线程的生命周期

线程生命周期是线程开始和终止的时间跨度,包括新建、就绪、运行、终止、阻塞等几个状态阶段。线程类提供了各种方法来监视线程的状态。线程的各个状态之间的相互转换关系如下所示:

image

1.1 新建(New)

这是线程生命周期的第一个阶段,新建线程之后就开始了线程生命周期的循环过程。

1.2 就绪(Runnable)

线程创建、启动、获得所需资源或者运行完一个时间片之后,就进入就绪状态,表示可以运行了。

1.3 运行(Running)

线程调度器选择了该线程时,该线程就看开始执行,处于运行状态。

1.4 阻塞(Blocked)

线程执行期间需要等待用户输入或者资源不足时,该线程就进入阻塞状态,表示不能运行,直到满足运行条件才切换到就绪状态。

1.5 终止(Terminated)

当线程执行完毕或者死亡时,该线程处于终止状态。

2.Scala线程的实现

Scala线程的实现有两种方式:Thread类或者Runnable接口。

2.1 使用Thread类实现Scala线程

以下示例演示了使用Thread类实现Scala线程的过程:ThreadExample.scala

class MyThread1 extends Thread {
    override def run() {
        println("This is a Scala thread by class Thread")
    }
}

object ThreadExample {
    def main(args:Array[String]) {
        val t = new MyThread1()
        t.start()
    }
}

编译并执行以上代码,输出结果如下:

E:\Test>scalac ThreadExample.scala
E:\Test>scala ThreadExample
This is a Scala thread by class Thread

2.2使用Runnable接口实现Scala线程

以下示例演示了使用Runnable接口实现Scala线程:RunnableExample.scala

class MyThread2 extends Runnable {
    override def run() {
        println("This is a Scala thread by Interface Runnable")
    }
}

object RunnableExample {
    def main(args:Array[String]) {
        val e = new MyThread2()
        val t = new Thread(e)
        t.start()
    }
}

编译并执行以上代码,输出结果如下:

E:\Test>scalac RunnableExample.scala
E:\Test>scala RunnableExample
This is a Scala thread by Interface Runnable

3.Scala线程的方法

3.1Scala线程sleep()方法

sleep()方法用于在指定时间内休眠线程,以毫秒为单位作为时间参数:SleepExample.scala

class MyThread1 extends Thread {
    override def run() {
        for(i <- 0 to 5) {
            println(i)
            Thread.sleep(1000)
        }
    }
}
object SleepExample {
    def main(args:Array[String]) {
        val t1 = new MyThread1()
        val t2 = new MyThread1()
        t1.start()
        t2.start()
    }
}

编译并执行以上代码,输出结果如下:

E:\Test>scalac SleepExample.scala
E:\Test>scala SleepExample
0
0
1
1
2
2
3
3
4
4
5
5

3.2Scala线程join()方法

join()方法能保证当前线程运行完再执行其他线程:JoinExample.scala

class MyThread1 extends Thread {
    override def run() {
        for(i <- 0 to 5) {
            println(i)
            Thread.sleep(1000)
        }
    }
}
object SleepExample {
    def main(args:Array[String]) {
        val t1 = new MyThread1()
        val t2 = new MyThread1()
        t1.start()
        t1.join()
        t2.start()
    }
}

编译并执行以上代码,输出结果如下:

E:\Test>scalac SleepExample.scala
E:\Test>scala SleepExample
0
1
2
3
4
5
0
1
2
3
4
5

3.3Scala线程的其他常用方法

下面是一些Scala Thread类常用的方法:

方法 描述
public final String getName() 它返回线程的名称。
public final int getPriority() 它返回线程的优先级。
public Thread.State getState() 它返回此线程的状态。该方法设计用于监视系统状态,不用于同步控制。
public final boolean isAlive() 它测试这个线程是否存活着。如果线程已经启动并且尚未死亡,则该线程仍然存在。
public final void join() throws InterruptedException 它等待线程死亡。
public void run() 如果使用单独的Runnable运行对象构建此线程,则调用Runnable对象的run()方法; 否则,此方法不执行任何操作并返回。
public final void setName(String name) 它用于设置线程名称。
public final void setPriority(int newPriority) 它用于设置线程的优先级。
public static void sleep(long millis) throws InterruptedException 它用于执行指定的毫秒数休眠线程。
public static void yield() 它导致当前执行的线程对象临时暂停并允许其他线程执行。

相关文章

  • Scala函数式编程(三) scala集合和函数

    前情提要: scala函数式编程(二) scala基础语法介绍 scala函数式编程(二) scala基础语法介绍...

  • Scala编程基础30:Scala多线程

    进程是应用程序的执行过程;线程是比进程更小的执行单位。一个进程可以包含多个线程。这些线程共享父进程的资源。线程比进...

  • Scala函数式编程(四)函数式的数据结构 下

    前情提要 Scala函数式编程指南(一) 函数式思想介绍 scala函数式编程(二) scala基础语法介绍 Sc...

  • Scala函数式编程(五) 函数式的错误处理

    前情提要 Scala函数式编程指南(一) 函数式思想介绍 scala函数式编程(二) scala基础语法介绍 Sc...

  • Scala编程详解18:Actor入门

    Scala的Actor类似于Java中的多线程编程。但是不同的是,Scala的Actor提供的模型与多线程有所不同...

  • Scala编程:Actor入门

    Actor入门 引言 Scala的Actor类似于Java中的多线程编程。但是不同的是,Scala的Actor提供...

  • 第三讲函数详解

    Scala被认为是函数式编程语言,故Scala函数是Scala编程的核心。所以掌握scala的函数至关重要。 本章...

  • Scala基础

    Scala概述 Scala设计的目的是整合面向对象编程和函数式编程。Scala运行于Java平台(JVM),并兼容...

  • Scala从入门到小工| 01

    Scala学习之一 Scala概述 scala是一门多范式编程语言,集成了面向对象编程和函数式编程等多种特性。sc...

  • scala特性

    为了能用scala开发spark,简单的介绍一下scala特性.scala即面向对象编程,也同时面向方法编程,也可...

网友评论

      本文标题:Scala编程基础30:Scala多线程

      本文链接:https://www.haomeiwen.com/subject/whekdhtx.html