您的位置:首页 > 其它

多线程的优先级与休眠

2015-09-26 17:00 239 查看
一)多线程的优先级

在应用程序中,如果要对线程进行调度,最直接的方式就是设置线程的优先级。优先级越高的程序获得CPU执行的机会越大,线程的优先级用1~10之间的整数来表示,优先级依次递增。除了可以使用数字表示线程的优先级,还可以使用Thread类提供的三个静态常量来表示线程的优先级(你在逗我......还不如直接用数字呢....)

Thread类的静态常量 功 能 描 述

static int MAX_PRIORITY 线程优先级为10

static int MIN_PRIORITY 线程优先级为1

static int NORM_PRIORITY 线程优先级为5

程序在运行期,处于就绪状态的每个线程都有自己的优先级,main线程具有普通的优先级(5)。

线程的优先级可以通过Thread类的setPriority(int newPriority)方法对其进行性设置,参数newPriority接收的是1~10之间的整数或者那三个静态常量

下面通过一个案例来演示不同的优先级的两个线程在程序中的运行情况

package 线程的优先级;
class MaxPriority implements Runnable{
public void run(){
for(int i = 0 ;i < 10; i++){
System.out.println(Thread.currentThread().getName()+"正在输入:"+i);
}

}
}
class MinPriority implements Runnable{
public void run(){
for(int i = 0 ;i < 10; i++){
System.out.println(Thread.currentThread().getName()+"正在输入:"+i);
}
}
}
public class 线程的优先级 {
public static void main(String[] args) {
Thread t1 = new Thread(new MaxPriority(),"优先级别较高的线程");
Thread t2 = new Thread(new MinPriority(),"优先级别较低的线程");
t1.setPriority(Thread.MAX_PRIORITY);      //用Thread类的setPriority方法来设置优先级,将t1设置为10,t2设置为1;
t2.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.start();

}
}


2)线程的休眠

如果希望人为的控制线程,将正在执行的线程暂停一段时间,可以使用sleep(long millis)方法进行设置,不过该方法声明抛出InterruptedException异常,因此在调用时该捕获异常(tyr catch)或者声明抛出异常(throw)

接下来就演示一下sleep(long millis)方法在程序中的应用

package 线程睡眠;

public class 线程睡眠 {
public static void main(String[] args)throws Exception {
new Thread(new SleepThread()).start();
for(int i = 1; i < 11; i++){
if(i == 5){
Thread.sleep(2000);   //睡眠2秒
}
System.out.println("主线程正在输出:"+i);
Thread.sleep(500);   //睡眠500毫秒
}
}
}
class SleepThread implements Runnable{
public void run(){
for(int i = 1 ; i < 11; i++){
if(i == 3){
try{
Thread.sleep(2000);  //睡眠2秒
}catch(InterruptedException e){
e.printStackTrace();
}
}
System.out.println("线程一正在输出:"+i);
try{
Thread.sleep(500); //睡眠500毫秒
}catch(Exception e){
e.printStackTrace();
}
}

}
}

/**主线程正在输出:1
线程一正在输出:1
主线程正在输出:2
线程一正在输出:2
主线程正在输出:3     线程一在等于3的时候休眠两秒,主线程因为有sleep(500),所以主线程在线程一休眠的这
主线程正在输出:4     段时间内只能输出2个数
线程一正在输出:3
线程一正在输出:4
主线程正在输出:5
线程一正在输出:5
主线程正在输出:6
线程一正在输出:6
主线程正在输出:7
线程一正在输出:7
主线程正在输出:8
线程一正在输出:8
主线程正在输出:9
线程一正在输出:9
主线程正在输出:10
线程一正在输出:10
**/


未完待续.......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: