ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Scala多线程

2021-11-15 11:03:44  阅读:199  来源: 互联网

标签:Thread scala Demo Scala 线程 多线程 2.12


多线程是同时执行多个线程的过程。 它允许您独立执行多个操作。可以通过使用多线程来实现多任务。线程是轻量级的子进程,占用较少的内存。多线程用于在Scala中开发并发应用程序。

Scala不提供用于创建线程的任何单独的库。如果您熟悉Java的多线程概念,那么将会了解到它与Scala语言本身的语法相似。

可以通过扩展Thread类或Runnable接口来创建线程。两者都提供了运行方法来提供具体的实现。

Scala线程生命周期

线程生命周期是线程开始和终止的时间跨度。它有各种各样的阶段,如新,可运行,终止,阻止等。线程类提供了各种方法来监视线程的状态。

Scala线程状态如下:

  • 新建(New)
  • 可运行(Runnable)
  • 运行(Running)
  • 不可运行(Non-Runnable - 阻塞)
  • 终止(Terminated)

1. 新建(New)

这是线程的第一个状态,在新线程开始之前。

2. 可运行(Runnable)

这是线程已经启动但是线程调度程序没有选择它作为正在运行的线程的状态。

3. 运行(Running)

如果线程调度程序选择了该线程,则该线程处于运行状态。

4. 不可运行(Non-Runnable - 阻塞)

这是线程仍然存在但由于等待输入或资源而无法运行的状态。

5. 终止(Terminated)

run()方法退出时,线程处于终止或死亡状态。

 

Scala线程实现
在Scala中,创建线程有两种方法:
  • 通过扩展Thread
  • 通过实现Runnable接口

通过扩展Thread类的Scala线程示例

以下示例扩展了Thread类并覆盖了run方法,start()方法用于启动线程

class ThreadExample extends Thread{  
    override def run(){  
    println("Thread is running?");  
    }  
}  
object Demo{  
    def main(args:Array[String]){  
        var t = new ThreadExample()  
        t.start()  
    }  
}

将上面代码保存到源文件:Demo.scala中,使用以下命令编译并执行代码 -

D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo.scal
Thread is running...

通过扩展Runnable接口的Scala线程示例

以下示例实现了Runnable接口并覆盖了run方法。 start()方法用于启动线程。

class ThreadExample extends Runnable{  
    override def run(){  
        println("Thread is running...")  
    }  
}  
object Demo{  
    def main(args:Array[String]){  
        var e = new ThreadExample()  
        var t = new Thread(e)  
        t.start()  
    }  
}

将上面代码保存到源文件:Demo.scala中,使用以下命令编译并执行代码 -

D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo.scal
Thread is running...

 

Scala线程方法

线程(Thread)类提供了各种方法来处理线程的状态。可以使用这些方法来控制线程的执行。

下表包含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 Thread sleep()方法

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

class ThreadExample extends Thread{  
    override def run(){  
    for(i<- 0 to 5){  
            println(i)  
            Thread.sleep(500)  
        }  
    }  

}  

object Demo{  
    def main(args:Array[String]){  
    var t1 = new ThreadExample()  
    var t2 = new ThreadExample()  
        t1.start()  
        t2.start()  
    }  
}

将上面代码保存到源文件:Demo.scala中,使用以下命令编译并执行代码 -

D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo.scal
0
0
1
1
2
2
3
3
4
4
5
5

Scala Thread join()示例

join()方法等待线程死机,换句话说,join()方法用于保持当前正在运行的线程的执行,直到指定的线程完成它的执行。

class ThreadExample extends Thread{  
    override def run(){  
        for(i<- 0 to 5){  
            println(i)  
            Thread.sleep(500)  
        }  
    }  

}  
object MainObject{  
    def main(args:Array[String]){  
        var t1 = new ThreadExample()  
        var t2 = new ThreadExample()  
        var t3 = new ThreadExample()  
        t1.start()  
        t1.join()  
        t2.start()  
        t3.start()  
    }  
}

将上面代码保存到源文件:Demo.scala中,使用以下命令编译并执行代码 -

D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo.scal
0
1
2
3
4
5
0
0
1
1
2
2
3
3
4
4
5
5

Scala setName()方法示例

在以下示例中,正在设置和获取线程名称。

class ThreadExample() extends Thread{  
    override def run(){  
        for(i<- 0 to 5){  
            println(this.getName()+" - "+i)  
            Thread.sleep(500)  
        }  
    }  
}  

object MainObject{  
    def main(args:Array[String]){  
        var t1 = new ThreadExample()  
        var t2 = new ThreadExample()  
        var t3 = new ThreadExample()  
        t1.setName("First Thread")  
        t2.setName("Second Thread")  
        t1.start()  
        t2.start()  
    }  
}

将上面代码保存到源文件:Demo.scala中,使用以下命令编译并执行代码 -

D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo.scal
First Thread - 0
Second Thread - 0
Second Thread - 1
First Thread - 1
Second Thread - 2
First Thread - 2
Second Thread - 3
First Thread - 3
Second Thread - 4
First Thread - 4
Second Thread - 5
First Thread - 5

Scala线程优先级示例

可以使用其预定义的方法设置线程优先级,以下示例设置线程的优先级。

class ThreadExample() extends Thread{  
    override def run(){  
        for(i<- 0 to 5){  
            println(this.getName())  
            println(this.getPriority())  
            Thread.sleep(500)  
        }  
    }  
}  
object Demo{  
    def main(args:Array[String]){  
        var t1 = new ThreadExample()  
        var t2 = new ThreadExample()  
        t1.setName("First Thread")  
        t2.setName("Second Thread")  
        t1.setPriority(Thread.MIN_PRIORITY)  
        t2.setPriority(Thread.MAX_PRIORITY)  
        t1.start()  
        t2.start()  
    }  
}

将上面代码保存到源文件:Demo.scala中,使用以下命令编译并执行代码 -

D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo.scal
First Thread
Second Thread
10
1
Second Thread
10
First Thread
1
Second Thread
10
First Thread
1
Second Thread
10
First Thread
1
Second Thread
10
First Thread
1
Second Thread
10
First Thread
1

Scala线程多任务示例

以下示例通过使用多个线程来运行多个任务,这个例子说明了如何在Scala中实现多任务。

class ThreadExample() extends Thread{  
    override def run(){  
        for(i<- 0 to 5){  
        println(i)              
        Thread.sleep(500)  
    }  
}  
def task(){  
    for(i<- 0 to 5){  
            println(i)  
            Thread.sleep(200)  
        }  
    }  
}  

object Demo{  
    def main(args:Array[String]){  
        var t1 = new ThreadExample()  
        t1.start()  
        t1.task()           
    }  
}

将上面代码保存到源文件:Demo.scala中,使用以下命令编译并执行代码 -

D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo.scal
First Thread
0
0
1
2
1
3
4
2
5
3
4
5
Ref:Scala线程方法 - Scala教程™ (yiibai.com)

标签:Thread,scala,Demo,Scala,线程,多线程,2.12
来源: https://www.cnblogs.com/cy0628/p/15555153.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有