Scala学习之路之篇十三(scala多线程)

// ============== Scala 多线程===========
// 多线程是同时执行多个线程的过程。 它允许您独立执行多个操作。可以通过使用多线程来实现多任务。
// 线程是轻量级的子进程,占用较少的内存。多线程用于在Scala中开发并发应用程序。
// Scala不提供用于创建线程的任何单独的库。
// 可以通过扩展 Thread类 或 Runnable接口 来创建线程。两者都提供了运行方法来提供具体的实现。

// --------- Scala线程生命周期--------- 
// 线程生命周期是线程开始和终止的时间跨度。它有各种各样的阶段,如新,可运行,终止,阻止等。
// 线程类提供了各种方法来监视线程的状态。
// Scala线程状态如下:
// 		1、新建(New)   : 这是线程的第一个状态,在新线程开始之前。
// 		2、可运行(Runnable)  : 这是线程已经启动但是线程调度程序没有选择它作为正在运行的线程的状态。
// 		3、运行(Running)   : 如果线程调度程序选择了该线程,则该线程处于运行状态。
// 		4、不可运行(Non-Runnable - 阻塞)  : 这是线程仍然存在但由于等待输入或资源而无法运行的状态。
// 		5、终止(Terminated)  : 当run()方法退出时,线程处于终止或死亡状态。

// ---------- Scala创建线程 ----------
// -----实例1、通过扩展Thread类
// 以下示例扩展了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()                          // 启动线程
    }  
}

// ------实例2:通过扩展Runnable接口
// 以下示例实现了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()                            // 启动线程
    }  
}

// -------------- 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()       // 它导致当前执行的线程对象临时暂停并允许其他线程执行。原文出自【易百教程】,商业转载请联系作者获得授权,非商业请保留原文链接:https://www.yiibai.com/scala/scala-thread-methods.html

// -------实例3:Scala Thread sleep()方法演示
// sleep()方法用于在指定时间内休眠线程,以毫秒为单位作为时间参数。(睡眠相当于添加阻塞)
class ThreadExample extends Thread{  
    override def run(){  
    	for(i<- 0 to 5){  
            println(i)  
            Thread.sleep(500)    // 睡眠500毫秒
        }  
    }  

}  

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

// -------实例4:Scala Thread 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()  
    }  
}

// -------实例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")     // 给 线程1 设置 线程名
        t2.setName("Second Thread")    // 给 线程2 设置 线程名
        t1.start()  
        t2.start()  
    }  
}

// ------- 实例6: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)   // 设置线程优先级(1)
        t2.setPriority(Thread.MAX_PRIORITY)   // (10)
        t1.start()  
        t2.start()  
    }  
}

// --------实例7: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()     // 任务1
        t1.task()      // 任务2
    }  
}

猜你喜欢

转载自blog.csdn.net/weixin_40873462/article/details/89680070