• java线程简介


    前言

    很多地方我们都会用到线程,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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    线程的状态

    线程基本有六种状态
    1.new ,创建状态
    2.runnable 运行状态
    3.blocked 阻塞状态
    4.waiting 等待状态
    5.time_waiting 超时等待状态
    6.terminated 终止状态
    装填之间的转换,我就不展示了

    daemon线程

    daemon线程是一种支持型线程,它主要作用于程序种后台调度以及支持性工作。这意味着,当一个java虚拟机种不存在非daemon线程的时候,java虚拟机将会退出。

    总结

    线程在java中还是比较重要的一部分,我们这里就是对其做个大致的介绍,让大家有一个简单的了解方便后续线程深入的介绍。

  • 相关阅读:
    决策树分类和预测算法的原理及实现
    Elasticsearch核心概念解析:索引、文档与类型
    抖音视频笔记
    本地缓存、Redis数据缓存策略
    std : : map
    2023牛客OI赛前集训营-提高组(第三场)C.分糖果
    mysql 查询
    论文分享 | 利用单模态自监督学习实现多模态AVSR
    OpenAI-Sora学习手册
    LeetCode-1668. 最大重复子字符串【字符串匹配】
  • 原文地址:https://blog.csdn.net/qq_41820066/article/details/127621648