线程的优先级:
1. java中对线程的优先级定义了10个级别,范围:1 (Thread.MIN_PRIORITY )~ 10 (Thread.MAX_PRIORITY )),但不同的系统有不同 的线程优先级的取值范围
2. Thread类的默认优先级是5(Thread.NORM_PRIORITY)
3. 设置线程优先级使用setPriority(int)方法
展示线程优先级的一个小案例:
FatherThread.java
package com.poriority.entity;
/**
* @version 2018-1-2 上午8:43:54
*/
public class FatherThread extends Thread{
public FatherThread(){
//设置类的优先级,需要通过构造方法设置类的优先级,此处设置的优先级会影响子类的优先级
this.setPriority(8);
}
}
SonThread.java
package com.poriority.entity;
/**
* @version 2018-1-2 上午8:53:04
*/
public class SonThread extends FatherThread{
//子类的优先级继承于父类的优先级
}
TestPriority.java
package com.poriority.test;
import com.poriority.entity.FatherThread;
import com.poriority.entity.SonThread;
/**
* @version 2018-1-2 上午8:45:02
*/
public class TestPriority {
public static void main(String[] args) {
Thread thread = new Thread();
System.out.println("默认线程的优先级是:" + thread.getPriority());
FatherThread ft = new FatherThread();
//默认线程的优先级是继承父类的优先级
System.out.println("FatherThread的线程优先级是:" + ft.getPriority());
//此处设置的优先级,只用于设置当前对象的优先级,对于子类的优先级没有影响
ft.setPriority(9);
System.out.println("FatherThread的线程设置的优先级是:" + ft.getPriority());
SonThread st = new SonThread();
//子类默认的优先级是继承父类的优先级
System.out.println("SonThread的线程优先级是:" + st.getPriority());
}
}
线程优先级总结:
子类线程的默认优先级是继承直接父类线程的优先级,对象的优先级是通过对象.serPriority(int)方法来实现的,类的优先级是通过构造方法来实现的this.SetPriority(int)。
后台线程:
1. 在系统的后台运行,不与用户直接交互;这样的 线程称为后台线程(也称服务线程或守护线程)。
– 例如:文件下载
2. setDaemon()方法:将线程设置为后台线程
展示后台线程的一个小案例:
FatherThread.java
package com.poriority.entity;
/**
* @version 2018-1-2 上午8:43:54
*/
public class FatherThread extends Thread{
public FatherThread(){
//设置类的优先级,需要通过构造方法设置类的优先级,此处设置的优先级会影响子类的优先级
this.setPriority(8);
}
//构造方法,设置线程的名字
public FatherThread(String name){
super(name);
}
//线程
@Override
public void run() {
try {
Thread.sleep(100000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
SonThread.java
package com.poriority.entity;
/**
* @version 2018-1-2 上午8:53:04
*/
public class SonThread extends FatherThread{
//子类的优先级继承于父类的优先级
//线程
@Override
public void run() {
try {
Thread.sleep(100000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
TestThread.java
package com.poriority.test;
import com.poriority.entity.FatherThread;
import com.poriority.entity.SonThread;
/**
* @version 2018-1-2 上午8:45:02
*/
public class TestPriority {
public static void main(String[] args) {
Thread thread = new Thread();
System.out.println("默认线程的优先级是:" + thread.getPriority());
FatherThread ft = new FatherThread("father");
//默认线程的优先级是继承父类的优先级
System.out.println("FatherThread的线程优先级是:" + ft.getPriority());
//此处设置的优先级,只用于设置当前对象的优先级,对于子类的优先级没有影响
ft.setPriority(9);
ft.start();
System.out.println("FatherThread的线程设置的优先级是:" + ft.getPriority());
SonThread st = new SonThread();
//将子类线程设置为后台线程,参数为boolean类型的,true表示设置为后台线程,false表示不设置为后台线程,后台线程的设置必须在线程启动之前设置
st.setDaemon(true);
st.start();
//子类默认的优先级是继承父类的优先级
System.out.println("SonThread的线程优先级是:" + st.getPriority());
}
}
后台线程总结
后台线程的设置方法是setDaemon()方法,在线程启动之前进行设置,查看后台线程的方法是单步执行的时候查看,给线程重命名的方法是使用构造方法,在构造方法中调用父类的方法进行重命名。