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