java线程简介

本文主要介绍了Java线程相关知识。Java线程本质是在操作系统层面一对一创建,创建方式多样。多线程有利用多核、响应快、编程模型好等优点。线程有优先级,状态有六种。此外,还介绍了daemon线程,它用于后台调度,无非daemon线程时JVM会退出。

前言

很多地方我们都会用到线程,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中还是比较重要的一部分,我们这里就是对其做个大致的介绍,让大家有一个简单的了解方便后续线程深入的介绍。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mark---小鑫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值