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