你好我是辰兮,很高兴你能来阅读,本篇文章继续为大家讲解Java多线程之线程属性,下面有案例的截图和相关代码可以自行实践,相关的更多面试知识已经提前整理好文章可以阅读学习,分享获取新知,希望对Java初学者有帮助。
1.Java线程的实现方式:
Java线程的实现方式详解2.线程进程基础知识参考:
进程线程的面试问题小结3.线程面试常见问题参考:
Java常见多线程基础面试问题
一、name属性
先创建一个线程
/**
*创建类继承Thread,重写run方法,在run方法中定义线程体
*/
public class MyThread extends Thread{
public void run() {
//定义线程体
}
}
//创建线程
Thread t = new MyThread();
①设置线程的name属性
//通过线程对象调用setName方法设置线程名称
t.setName("线程名");
②在线程体中获取线程name属性
//在实现Runnable接口的线程类的线程体:
String name = Thread.currentThread().getName();
//在继承Thread类的线程类的线程体:
String name = this.getName();
二、线程优先级
线程是具有优先级的.优先级高的线程具有比优先级低的线程有更多的执行机会,而并不是优先级高的先执行优先级低的后执行。
线程的优先级一共有10级,最低级为1级,最高级为10级,默认5级。
//获取线程优先级
int p = t.getPriority();
//设置线程优先级
t.setPriority(int p);
三、守护线程
线程分类 | 作用 |
---|---|
用户线程 | 具有独立业务流的线程 |
守护线程 | 为用户线程提供服务 |
守护线程特性:
- 当所有用户线程都执行结束,即使守护线程线程体没有执行完也会停止;
- 如果有任何一个用户线程没有执行结束,即使守护线程执行结束了也不会停止,进入等待状态,直到最后一个用户线程执行结束。 设置守护线程:
ps:打个比方,守护线程好比烧烤摊的老板,用户线程就是顾客,当顾客没吃完,就算老板到了下班的时间老板也要等待。
//判断当前线程是否为守护线程?
boolean b = t.isDaemon();
//设置守护线程
t.setDaemon(true);
守护线程又称为后台线程,精灵线程,比如,Java 的垃圾回收线程是守护线程,main 线程不是守护线程。其特征是前台线程全部死亡,守护线程自动死亡。
四、主线程
主方法本身也是一个独立的线程,线程名默认为main
主线程非守护线程。
ps:参考上篇文章的执行run()方法是在当前线程内执行,我们可以获取出其线程名称。当前线程名称为main.
上述截图代码请参考,自行复制操作实践
public class SellTickets {
static int count = 100;
static Runnable r = new Runnable() {
@Override
public void run() {
while(count > 0) {
count--;
System.out.println(Thread.currentThread().getName() + "售出了 一张票,剩余" + count);
}
}
};
public static void main(String[] args) {
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
Thread t3 = new Thread(r);
}
}
The best investment is to invest in yourself
2020.05.30 记录辰兮的第71篇博客