文章目录
- 前言
- Java线程简介
- 多线程的优点
- 线程的优先级
- 线程的状态
- daemon线程
- 总结
前言
很多地方我们都会用到线程,java操作系统的线程本质其实就是,你写了一个线程类,java替你一对一的在操作系统层面创建了一个线程。之前应该是这样的,现在有没有改变还需要看官方的文档。
Java线程简介
java种创建线程方式有很多种,最常见,用的最多的,应该就是使用main启动一个线程如下图
上面是执行程序,下面是结果
1main 就是main线程
2.是清除Reference的线程
3. 专门用来调用finalizer方法的程序(关于finalizer方法,我们之前有介绍过)
剩下的就不一一介绍了,有兴趣的自行了解。
多线程的优点
1.线程计算机大多数都是多处理核心,如果还是单线程,属实有点浪费。
2.更快的响应时间,在做一些复杂的计算和业务的时候,单线程通常需要花费很久的时间,但是多线程就会快上很多。
3.更好的编程模型,对于多线程的编写java提供了很好的编程模型,开发人员不用考虑如何将其多线程化。
线程的优先级
大家应该知道,现在的操作系统会给线程分一个时间片,来决定线程可以使用处理器的时间。而线程的优先级决定了线程可以多分配一些还是少分配一些。
java种的线程也有优先级,但是不一定和操作系统对标的(有的时候会生效,有的时候不生效)。
public class Priority {
private static volatile boolean notStart = true;
private static volatile boolean notEnd = true;
public static void main(String[] args) throws InterruptedException {
List<Job> list = new ArrayList<Job>();
for (int i = 0; i < 10; i++) {
int prority = i < 5 ? Thread.MIN_PRIORITY : Thread.MAX_PRIORITY;
Job job = new Job(prority);
list.add(job);
Thread thread = new Thread(job,"Thread" + i);
thread.setPriority(prority);
thread.start();
}
notStart = false;
TimeUnit.SECONDS.sleep(10);
notEnd = false;
for (Job j : list) {
System.out.println("Job priority :" + j.priority + "count:" + j.jobConut);
}
}
static class Job implements Runnable{
// 优先级
private int priority;
// 线程数量
private long jobConut;
public Job(int priority){
this.priority = priority;
}
@Override
public void run() {
// 大家一起把资源让出来
while (notStart){
Thread.yield();
}
// 大家一起开始执行先让资源再计算
while(notEnd){
Thread.yield();
jobConut++;
}
}
}
}
线程的状态
线程基本有六种状态
1.new ,创建状态
2.runnable 运行状态
3.blocked 阻塞状态
4.waiting 等待状态
5.time_waiting 超时等待状态
6.terminated 终止状态
装填之间的转换,我就不展示了
daemon线程
daemon线程是一种支持型线程,它主要作用于程序种后台调度以及支持性工作。这意味着,当一个java虚拟机种不存在非daemon线程的时候,java虚拟机将会退出。
总结
线程在java中还是比较重要的一部分,我们这里就是对其做个大致的介绍,让大家有一个简单的了解方便后续线程深入的介绍。