首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

类加载与 Java主类加载机制解析

Java类加载的触发条件比较多,其中比较特殊的便是Java程序中包含main()主函数的类——这种类一般也被称作Java程序的主类。...Java主类的加载由JVM自动触发——JVM执行完自身的若干初始化逻辑之后,第一个加载的便是Java程序的主类。总体上而言,Java主类加载的链路如下: ?...Java主类的加载也无法绕过这3个接口。...接口经过一系列调用,最终调用SystemDictionary:: resolve_instance_class_or_null()接口,该接口内部逻辑比较冗长,会经过层层判断,确认同一个加载器没有别的线程在加载同一个类...主类,并最终创建Java主类在JVM内部的对等体——klassInstance,由此完成Java主类的加载。

94110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    你真的了解 Thread 线程类吗?

    其中java.lang.Thread是 Java 实现多线程编程最核心的类,学习Thread类中的方法,是学习多线程的第一步。...采用实现Runnable、Callable接口的方式创建线程时,线程类只是实现了 Runnable或Callable接口,同时还可以继承其他类,最后通过Thread类来启动线程。...关于线程组的相关知识,我们会在后期的系列文章中进行讲解。 3.2、实例方法 在 Java 中,实例方法只有实例对象才能调用,也就是new出来的对象或者反射出来的对象,类是无法直接调用的。...3.2.5、setDaemon() 在 Java 中线程分为两种,一种是用户线程,一种是守护线程。...四、小结 本文主要围绕线程类Thread相关的常用方法进行详解,内容难免有所遗漏,欢迎网友留言指出。 五、参考 1、五月的仓颉 - Thread中的实例方法介绍 2、菜鸟教程 - Java 多线程编程

    35620

    Java 类加载之匿名类和主类相互依赖问题

    指令的在当前的执行又依赖于当前所处的主类,主类并没有执行结束,因此它需要等待主类执行结束,因此会在此停顿,如下: ?...,再往下看,我们能发现,join的具体实现,其实就是wait()来实现,当子线程中的程序再等待main线程的实现类初始化完成的时候,又依赖了主线程中的某些元素对象。...那么就会开始等待主线程初始化完成,这个时候,根据classloader加载类的执行顺序,在#16就会开始等待,那么主类无法初始化完成,造成相互等待现相。...Result 匿名内置类的初始化不能依赖于外部类的初始化 lambda表达式中invokeDynamic作为主类字节码的一部分,需要等待主类初始化完成才能开始执行 总之,在类的初始化阶段,不能出现内置类...(匿名/Lambda)和主类初始化中相互依赖的对象

    52120

    Java工具集-线程工具类

    简单工具类 写作初衷:由于日常开发经常需要用到很多工具类,经常根据需求自己写也比较麻烦 网上好了一些工具类例如commom.lang3或者hutool或者Jodd这样的开源工具,但是 发现他们之中虽然设计不错...介绍 遵从两大原则 1.绝不依赖JDK以外的源码 2.牺牲代码复用性,每个类都必须是单独的组件,绝不互相引用,做到完全解耦 package *; import java.util.concurrent.CancellationException...; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import...java.util.concurrent.Future; import java.util.concurrent.TimeUnit; /** * @program: simple_tools *...@description: 线程工具类 * @author: ChenWenLong * @create: 2019-10-18 13:51 **/ public class ThreadUtils

    66510

    Java并发编程之set集合的线程安全类你知道吗

    Java并发编程之-set集合的线程安全类 Java中set集合怎么保证线程安全,这种方式你知道吗?...在Java中set集合是 本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《并发集合系列》教程的第二篇: 本文主要内容:Set集合子类底层分别是什么?...怎么解决set线程安全问题? 一:Set集合子类 Set的三个子类分别是:HaseSet、TreeSet、LinkedHashSet.这三个都是线程不安全的。那么这三个子类的底层是什么?...四:Set集合怎么实现线程安全? 方案一: 和list一样,使用Colletcions这个工具类syn方法类创建个线程安全的set....想要创建线程安全的set可以通过工具类或者是juc包下相关的类创建。如下图:

    11.3K00

    java多线程系列_用Thread类创建线程(2)

    在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。...一个普通的Java类只要从Thread类继承,就可以成为一个线程类。并可通过Thread类的start方法来执行线程代码。...注意:任何一个Java程序都必须有一个主线程。一般这个主线程的名子为main.只有在程序中建立另外的线程,才能算是真正的多线程程序。也就是说,多线程程序必须拥有一个以上的线程。...Thread类有一个重载构造方法可以设置线程名。除了使用构造方法在建立线程时设置线程名,还可以使用Thread类的setName方法修改线程名。...原文:http://java.chinaitlab.com/line/778510.html

    52230

    Java用户线程和守护线程,线程默认Daemon值是false吗?

    文章目录 用户线程 守护线程 必须要在start()方法之前设置守护线程 线程默认的daemon值 总结 Java中通常有两种线程: 用户线程和 守护线程(也被称为服务线程) 通过 Thread.setDaemon...如果用户线程全部结束了,意味着程序需要完成的业务操作已经结束了,系统可以退出了。所以当系统只剩下守护进程的时候,Java虚拟机会自动退出。...线程默认的daemon值 首先看一下创建线程源码,Thread类的init()方法 也就是说线程的daemon的默认值取决于父线程的daemon值,当父线程为用户线程,子线程默认是用户线程,当父线程为守护线程时...,t1线程为t2线程的父线程,线程是否为守护线程默认取决于父线程的值,也就是说t2默认线程类型和t1一样的,都为守护线程。...总结 java中的线程分为用户线程和守护线程(ps:还有虚拟线程也叫协程) 程序中的所有的用户线程结束之后,不管守护线程处于什么状态,java虚拟机都会自动退出 调用线程的实例方法setDaemon()

    78620

    使用Java线程同步工具类CountDownLatch

    java.util.concurrent.CountDownLatch是Java并发并发编程中的线程同步工具类,基于AQS(java.util.concurrent.locks.AbstractQueuedSynchronizer...CountDownLatch工具类主要应用在如下场景:等待一组线程执行完毕后继续执行后续操作。 应用举例:模拟使用多个线程同时调用多个RPC方法,然后汇总所有线程获取到的返回结果。...1 latch.countDown(); System.out.println(String.format("线程%s结束了", Thread.currentThread...线程Thread-9结束了 线程Thread-3结束了 线程Thread-6结束了 线程Thread-5结束了 线程Thread-7结束了 线程Thread-4结束了 线程Thread-0结束了 线程Thread...-2结束了 线程Thread-8结束了 线程Thread-1结束了 最终的汇总结果:[result4, result0, result9, result8, result2, result5, result3

    18220

    Java多线程:神秘的线程变量 ThreadLocal 你了解吗?

    前言 在 Java多线程中,线程变量ThreadLocal非常重要,但对于很多开发者来说,这并不容易理解,甚至觉得有点神秘 今天,我将献上一份 ThreadLocal的介绍 & 实战攻略,希望你们会喜欢...ThreadLocal实例 = 类中的private、static字段 // 2. 只需实例化对象一次 & 不需知道它是被哪个线程实例化 // 3....1").start(); new Thread(runnable, "线程2").start(); } // 线程类 public...ThreadLocal.ThreadLocalMap threadLocals = null; // 即 Thread类持有threadLocals变量 // 线程类实例化后...总结 本文全面讲解了Java多线程ThreadLocal的相关知识 下面我将继续对 Android中的知识进行深入讲解 ,有兴趣可以继续关注Carson_Ho的安卓开发笔记 ---- 请 帮顶 / 评论点赞

    50220

    Java提示错误: 找不到或无法加载主类

    C:\Java\IdeaProjects\java>java xxxx 错误: 找不到或无法加载主类 xxxx 检查java在Idea终端中是否可用,如不可用,编辑编译器输出路径:文件→项目结构→模块→...路径→输出目录 或 设置→工具→终端→项目设置→环境变量 // https://cn.fankuiba.com C:\Java\IdeaProjects\java>java -version java...version "1.8.0_231" Java(TM) SE Runtime Environment (build 1.8.0_231-b11) Java HotSpot(TM) 64-Bit Server...VM (build 25.231-b11, mixed mode) 检查java在命令行PowerShell中是否可用,如不可用配置好系统环境变量 PS C:\Users\XX> java ......PS C:\Users\XX> java xxxx 错误: 找不到或无法加载主类 xxxx 手动拷贝项目路径下的class文件到C:\Users\XX> 下可正常执行 在各终端下cd到class文件存放路径即可

    2K10
    领券