网站建设专业如何做到廉洁自律佛山建站专

张小明 2026/3/12 19:36:32
网站建设专业如何做到廉洁自律,佛山建站专,中文编程,程序员培训机构最新排名作者有话要说#xff1a; 本文章适合想要快速了解和学习线程的基本知识点#xff0c;适合考试复习和准备面试的同学。 一#xff0c;了解线程和进程 官方给出的关于这两个名词的具体概念解释如下#xff1a; 进程#xff08;Process#xff09;是系统进行资源分配的…作者有话要说本文章适合想要快速了解和学习线程的基本知识点适合考试复习和准备面试的同学。一了解线程和进程官方给出的关于这两个名词的具体概念解释如下进程Process是系统进行资源分配的基本单位。线程Thread是操作系统能够进行运算调度的最小单位。它被包含在进程之中是进程中的实际运作单位。让我们拿一个工厂进行举例来具体理解什么是资源分配什么是运算调度。进程就像是工厂本身而线程是工厂中的工人操作系统就是工厂中的领导CPU就是工厂中的机器。资源分配就是操作系统把计算机的硬件、软件资源分配给进程使用的过程。把操作系统比作 “工厂领导”进程是 “工厂”资源分配就是工厂领导给每个工厂分配独立的办公室内存、办公设备硬件运算调度本质就是给线程分配 CPU 的 “使用权”。把 CPU 核心比作 “工厂的机器”线程是 “操作机床的工人”运算调度就是 “车间调度员” 的工作决定哪一个工人线程在什么时间段使用这个机器CPU。具体关系图如下如所示请忽略丑陋的画技二创建线程的几种方式一般说到实现线程的几种方法大家都会想到四种方式继承Thread类实现callable接口实现runnable接口线程池。实现两种接口的方法是一样的所以这边咱们只介绍实现runnable接口的方式至于两种接口方式实现的区别和优缺点这里不做介绍未来会单独出一期内容介绍还有线程池实现线程的方式线程池是一个很大的知识点需要用的技术更加复杂所以也放到以后单独的一期内容去讲解。接下来的代码学习建议大家可以自己动手敲一遍代码感受一下能够帮助大家理解。先给大家介绍一下通过继承Thread类实现线程的代码public class ThreadEasyA extends Thread{ //通过继承Thread类实现线程 Override public void run() { System.out.println(线程运行); } public static void main(String[] args) { ThreadEasyA a new ThreadEasyA(); a.start(); } }运行结果线程运行还有通过实现接口创建线程的方式public class RunableThread implements Runnable{ //通过实现runnable接口实现线程 Override public void run() { System.out.println(线程运行); } public static void main(String[] args) { Thread t new Thread(new RunableThread()); t.start(); } }运行结果线程运行三知识拓展可跳过这一部分的知识点与线程无关不想要学习的同学可以直接跳过。那为什么要介绍这两个概念呢因为在平时的代码书写中通过匿名内部类的方式和lambda表达式的方式去写创建线程的代码可以更加的简洁而且线程的代码是很经典的使用匿名内部类和lambda表达式的教学案例。匿名内部类首先什么叫做匿名内部类呢匿名内部类是 Java 中一种没有显式类名的局部内部类它是定义类、创建实例的 “一站式” 语法糖 —— 直接继承某个类 / 实现某个接口并且在定义的同时就创建该类的唯一实例。它的核心价值是简化代码尤其适用于仅需使用一次的类实例场景避免为简单逻辑单独定义命名类。匿名内部类的特点没有类名。必须继承类或者实现接口。可访问外部类对象。没有构造方法。到这里还没有理解的同学也没有关系接下来通过对比代码的形式来帮助大家去理解什么叫做匿名内部类public class ThreadEasy { public static void main(String[] args) { // 匿名内部类实现线程 Thread t new Thread(new Runnable(){ Override public void run() { System.out.println(匿名内部类BBBB); } }); t.start(); } }从代码中可以看出来普通的通过Thread类实现接口需要两步定义类创建实例但是通过匿名内部类的方式只需要一步就可以实现lambda表达式这里的道理和上面是一样的咱们直接上代码public class ThreadEasy { public static void main(String[] args) { //lambda表达式实现线程 new Thread(() - System.out.println(lambda表达式)).start(); } }大家可以看出来是不是代码更加的简洁了只需要一行代码就可以显示线程的创建。不过在使用lambda表达式的时候需要注意lambda表达式只适用于函数式接口只有一个抽象方法的接口。四线程常用方法接下来给大家介绍一下线程中常用的几种方法按照每个方法的难度程度将会给大家详细介绍一下join方法run()run方法的作用run方法并不是用来启动线程的从上面的代码中大家可以看出来不管是继承Thread类还是实现接口都重写了run方法但是run方法实际上并不会对线程造成什么影响你可以将run方法看成是大门。大门将线程内部与外部隔绝。start()start方法的作用就相当于线程的启动器用于启动线程也就是打开线程的大门将里面的东西放出来join()join方法的作用join方法的作用就相当于插队在A线程中执行B.join()方法就是让A线程进入停止状态阻塞状态让B线程先运行等到B线程运行完毕就可以重新开始运行A线程。接下来通过对比代码来给大家展示一下join方法的效果第一种情况没有join方法public class ThreadEasyA extends Thread{ Override public void run() { for (int i 0; i 5; i) { System.out.println(Thread.currentThread().getName() is i); } } public static void main(String[] args) { ThreadEasyA a new ThreadEasyA(); ThreadEasyA b new ThreadEasyA(); a.start(); b.start(); System.out.println(This is main Thread! It is running!!); } }运行结果大家可以尝试一下不管运行几遍This is main Thread!都在第一行下面的Thread-0和Thread-1的顺序是变化的。Thread-0就是线程a的执行结果Thread-1就是线程b的执行结果也就是代码的执行顺序是先执行main然后a线程和b线程交替执行。This is main Thread! It is running!! Thread-0 is 0 Thread-0 is 1 Thread-1 is 0 Thread-1 is 1 Thread-0 is 2 Thread-1 is 2 Thread-1 is 3 Thread-0 is 3 Thread-1 is 4 Thread-0 is 4第二种情况线程a执行join方法public class ThreadEasyA extends Thread{ Override public void run() { for (int i 0; i 5; i) { System.out.println(Thread.currentThread().getName() is i); } } public static void main(String[] args) throws InterruptedException { ThreadEasyA a new ThreadEasyA(); ThreadEasyA b new ThreadEasyA(); a.start(); a.join(); b.start(); System.out.println(This is main Thread! It is running!!); } }运行结果可以看出来执行顺序是先执行a线程再执行main最后执行b线程也就是说执行了a.join方法之后mian被阻塞了先让a线程插队执行a线程执行完毕后才放开mainThread-0 is 0 Thread-0 is 1 Thread-0 is 2 Thread-0 is 3 Thread-0 is 4 This is main Thread! It is running!! Thread-1 is 0 Thread-1 is 1 Thread-1 is 2 Thread-1 is 3 Thread-1 is 4大家可以自己再尝试一下其他的join组合来看一下运行的效果。不过join方法容易造成堵塞的情况例如想象一下在A线程中执行B.join在B线程中执行A.join那么AB线程都会等待对方先执行那么这种情况下就造成了两个线程都没有办法运行。yield()yield方法的作用yield方法就是告诉调度器领导当前线程工人愿意让出CPU资源工厂机器。但是线程的具体执行顺序还是有调度器来决定的。所以执行yield不一定会让当前线程停止。所以该方法适合用于让出CPU但是不阻塞线程的场景wait()wait方法的作用让线程释放锁并进入等待状态。notify()notify方法的作用唤醒正在等待的线程。一般情况下wait方法和notify方法是一起使用的。五线程的状态线程的状态图如下所示新建状态 (New): 当通过 new Thread () 创建一个线程对象后该线程处于新建状态此时它尚未开始执行。就绪状态 (Runnable): 当调用线程对象 start () 方法之后线程就进入就绪状态处于这个状态的线程已经准备好运行等待 CPU 的调度。运行状态 (Running): 如果线程获得了 CPU 时间片开始执行 run () 方法的线程执行体则线程处于运行状态。阻塞状态 (Blocked):线程在执行过程中可能因为各种原因进入阻塞状态如执行了 sleep () 方法或者等待某个同步锁。等待状态 (Waiting):线程在等待其他线程执行特定操作调用 wait ()、join ()、LockSupport.park () 方法进入等待状态通过 notify ()、notifyAll ()、interrupt () 方法进入就绪状态。死亡状态 (Dead):当线程的 run ()、call () 方法执行完毕或者线程被中断它将进入死亡状态。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

vue做网站对seo做移动网站优化排

对于每一位即将步入或刚刚踏入职场的学子而言,“实践报告”是连接校园理论与社会实战的关键纽带。它不仅是对实习经历的总结与反思,更是向学校和未来雇主展示你学习能力、工作态度和职业素养的重要载体。然而,面对如何将零散的工作日常转化为…

张小明 2026/3/5 3:58:24 网站建设

教育网站 模板展厅设计培训

ACE-Step模型部署指南:基于Docker和Nginx的高性能服务搭建 在AI音乐创作逐渐从实验室走向大众应用的今天,如何将一个复杂的深度学习模型稳定、高效地部署为对外服务系统,成为开发者面临的核心挑战。ACE-Step作为由ACE Studio与阶跃星辰联合推…

张小明 2026/3/5 3:58:24 网站建设

建设网站需要注意什么全网有哪些网站可以做淘客

Java-Object-Diff是一个轻量级且功能强大的Java库,专门用于简化Java对象间的差异对比和合并过程。它能够处理几乎任何类型的对象以及任意深度的嵌套结构,无需对现有类进行修改。通过构建差异树形结构来直观展示两对象之间的变化,支持轻松遍历…

张小明 2026/3/5 3:58:25 网站建设

增加网站外链建立门户网站的程序

Unix文件系统的缺陷与挑战 1. 无记录长度支持 Unix系统设计上没有为文件存储记录长度的规定,这一任务留给了程序员。若处理不当,不同程序对记录长度的预期差异可能不会被察觉。例如,一个程序以100字节记录存储文件,另一个程序以200字节记录读取,可能也不会发现问题。 U…

张小明 2026/3/5 3:58:28 网站建设

canvas网站源码网站排名优化是怎么做的

《网络文件系统(NFS)性能优化与配置指南》上半部分 在集群环境中,网络文件系统(NFS)的性能对于应用程序的运行至关重要。下面我们将深入探讨NFS在不同场景下的性能表现、相关操作的管理以及如何进行性能测量和配置优化。 1. NFS在不同用户场景下的性能影响 在集群系统中…

张小明 2026/3/5 3:58:38 网站建设

如何策划一个网站关于前端开发培训机构

Qwen3-Coder 30B A3B:Python开发者的终极AI编程助手 【免费下载链接】Qwen3-Coder-30B-A3B-Instruct 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-Coder-30B-A3B-Instruct 在人工智能技术深度赋能软件开发的今天,一款专注于Python编…

张小明 2026/3/5 3:58:32 网站建设