一个程序中可以有多个类,但只能有一个类是主类。 ●在 Java 应用程序中,这个主类是指包含 main()方法的类。主类是 Java 程序执行的入口点。...●在 Java 小程序中,这个主类是一个继承自系统类 JApplet 或 Applet 的子类。 应用程序的主类不一定要求是 public 类,但小程序的主类要求必须是 public 类。...简单说应用程序是从主线程启动(也就是 main() 方法)。
Java类加载的触发条件比较多,其中比较特殊的便是Java程序中包含main()主函数的类——这种类一般也被称作Java程序的主类。...Java主类的加载由JVM自动触发——JVM执行完自身的若干初始化逻辑之后,第一个加载的便是Java程序的主类。总体上而言,Java主类加载的链路如下: ?...Java主类的加载也无法绕过这3个接口。...接口经过一系列调用,最终调用SystemDictionary:: resolve_instance_class_or_null()接口,该接口内部逻辑比较冗长,会经过层层判断,确认同一个加载器没有别的线程在加载同一个类...主类,并最终创建Java主类在JVM内部的对等体——klassInstance,由此完成Java主类的加载。
其中java.lang.Thread是 Java 实现多线程编程最核心的类,学习Thread类中的方法,是学习多线程的第一步。...采用实现Runnable、Callable接口的方式创建线程时,线程类只是实现了 Runnable或Callable接口,同时还可以继承其他类,最后通过Thread类来启动线程。...关于线程组的相关知识,我们会在后期的系列文章中进行讲解。 3.2、实例方法 在 Java 中,实例方法只有实例对象才能调用,也就是new出来的对象或者反射出来的对象,类是无法直接调用的。...3.2.5、setDaemon() 在 Java 中线程分为两种,一种是用户线程,一种是守护线程。...四、小结 本文主要围绕线程类Thread相关的常用方法进行详解,内容难免有所遗漏,欢迎网友留言指出。 五、参考 1、五月的仓颉 - Thread中的实例方法介绍 2、菜鸟教程 - Java 多线程编程
; System.out.println(list); },i.toString()).start(); } }}解决办法:使用线程安全类...copyOnWrite就是写入时复制,简称COW,是计算机程序设计中的一个优化策略 CopyOnWriteArrayList原理:现成不安全的ArrayList在多线程添加的时候,会造成多个线程同时写入...copyOnWriteArrayList是List的现成安全类 java 代码解读复制代码public class ListTest { public static void main(String...[] args) {// 使用juc的CopyOnWriteArrayList类,它是线程安全的 List list = new CopyOnWriteArrayList...HashMap的安全类 java 代码解读复制代码public class MapTest { public static void main(String[] args) { Map
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
指令的在当前的执行又依赖于当前所处的主类,主类并没有执行结束,因此它需要等待主类执行结束,因此会在此停顿,如下: ?...,再往下看,我们能发现,join的具体实现,其实就是wait()来实现,当子线程中的程序再等待main线程的实现类初始化完成的时候,又依赖了主线程中的某些元素对象。...那么就会开始等待主线程初始化完成,这个时候,根据classloader加载类的执行顺序,在#16就会开始等待,那么主类无法初始化完成,造成相互等待现相。...Result 匿名内置类的初始化不能依赖于外部类的初始化 lambda表达式中invokeDynamic作为主类字节码的一部分,需要等待主类初始化完成才能开始执行 总之,在类的初始化阶段,不能出现内置类...(匿名/Lambda)和主类初始化中相互依赖的对象
简单工具类 写作初衷:由于日常开发经常需要用到很多工具类,经常根据需求自己写也比较麻烦 网上好了一些工具类例如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
代码示例 import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Callable...; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import...java.util.concurrent.FutureTask; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor...; import java.util.concurrent.TimeUnit; /** * @program: simple_tools * @description: 线程工厂 * @author...Callable r : runs) { addTask(r); } } } /** * 关闭线程池
很多刚学java的同学基本上都遇到过这个问题,刚才我刚了一下idea中入口雷类的包的地址,就出现这个了。原因很简单,在此特做记录,希望能帮助到点开这个文章,遇到错误的你。 如果你的错误如下: ?...如果有的话,就说明,你的类的路径发生了变化,但是这个idea的工具的启动类是不会变的。 所以咱们就改呗。 第一种方法: 1、点击编辑 ? 2、选择上自己的java入口类 ?
背景 默许jdk的配置大家都没有问题,执行java,javac无报错,但今天在尝试在本地起来kafka的时候,提示java 找不到或无法加载主类,然后日志中提示 Files 找不到或无法加载主类;C:\...Program 分析 其实很轻松的猜测出来,是因为我java安装在C:\Program Files\Java的原因,目录有空格,大多数的时候,这应该不会有问题的,但谁知道启动kafka的时报这个错误 解决方法
在多线程环境下,要使用线程安全的集合,比如,ConcurrentHashMap是线程安全的HashMap,CopyOnWriteArrayList是线程安全的ArrayList。...那么HashSet对应的线程安全集合,是什么呢?java有没有提供默认实现呢? 在java的concurrent包中,我找到了CopyOnWriteArraySet,那么它是线程安全的吗?...可以说明,CopyOnWriteArraySet是线程安全的Set。 那么CopyOnWriteArraySet是如何保证写入时的线程安全呢?...在add元素时,采用的是可重入锁来实现线程安全。 参考
Java并发编程之-set集合的线程安全类 Java中set集合怎么保证线程安全,这种方式你知道吗?...在Java中set集合是 本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《并发集合系列》教程的第二篇: 本文主要内容:Set集合子类底层分别是什么?...怎么解决set线程安全问题? 一:Set集合子类 Set的三个子类分别是:HaseSet、TreeSet、LinkedHashSet.这三个都是线程不安全的。那么这三个子类的底层是什么?...四:Set集合怎么实现线程安全? 方案一: 和list一样,使用Colletcions这个工具类syn方法类创建个线程安全的set....想要创建线程安全的set可以通过工具类或者是juc包下相关的类创建。如下图:
在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。...一个普通的Java类只要从Thread类继承,就可以成为一个线程类。并可通过Thread类的start方法来执行线程代码。...注意:任何一个Java程序都必须有一个主线程。一般这个主线程的名子为main.只有在程序中建立另外的线程,才能算是真正的多线程程序。也就是说,多线程程序必须拥有一个以上的线程。...Thread类有一个重载构造方法可以设置线程名。除了使用构造方法在建立线程时设置线程名,还可以使用Thread类的setName方法修改线程名。...原文:http://java.chinaitlab.com/line/778510.html
repackage 我们就会发现多了一个文件 这样在重新执行java
如何使用 java.util.concurrent.CyclicBarrier是Java并发并发编程中的线程同步工具类,基于java.util.concurrent.locks.ReentrantLock...CyclicBarrier工具类主要应用在如下场景:让一组线程同时到达栅栏位置才能开始执行。...:%s", resultList)); } 输出: 线程1准备好了 线程0准备好了 线程2准备好了 线程4准备好了 线程6准备好了 线程8准备好了 线程5准备好了 线程9准备好了 线程7准备好了 线程3...准备好了 线程1执行完毕!...线程3执行完毕! 线程2执行完毕! 线程0执行完毕! 线程4执行完毕! 线程5执行完毕! 线程6执行完毕! 线程7执行完毕! 线程9执行完毕! 线程8执行完毕!
文章目录 用户线程 守护线程 必须要在start()方法之前设置守护线程 线程默认的daemon值 总结 Java中通常有两种线程: 用户线程和 守护线程(也被称为服务线程) 通过 Thread.setDaemon...如果用户线程全部结束了,意味着程序需要完成的业务操作已经结束了,系统可以退出了。所以当系统只剩下守护进程的时候,Java虚拟机会自动退出。...线程默认的daemon值 首先看一下创建线程源码,Thread类的init()方法 也就是说线程的daemon的默认值取决于父线程的daemon值,当父线程为用户线程,子线程默认是用户线程,当父线程为守护线程时...,t1线程为t2线程的父线程,线程是否为守护线程默认取决于父线程的值,也就是说t2默认线程类型和t1一样的,都为守护线程。...总结 java中的线程分为用户线程和守护线程(ps:还有虚拟线程也叫协程) 程序中的所有的用户线程结束之后,不管守护线程处于什么状态,java虚拟机都会自动退出 调用线程的实例方法setDaemon()
四、线程安全的容器类 Java编码中,我们经常需要用到容器来编程。在并发环境下,Java提供一些已有容器能够支持并发。 1.Map 在Map类中,提供两种线程安全容器。...java.util.Hashtable Hashtable和HashMap类似,都是散列表,存储键值对映射。主要区别在于Hashtable是线程安全的。...java.util.concurrent.ConcurrentHashMap ConcurrentHashMap是性能更好的散列表。...在兼顾线程安全的同时,相对于Hashtable,在效率上有很大的提高。...java.util.concurrent.CopyOnWriteArrayList Collection类的线程安全容器主要都是利用的ReentrantLock实现的线程安全,CopyOnWriteArrayList
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
前言 在 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的安卓开发笔记 ---- 请 帮顶 / 评论点赞
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文件存放路径即可
领取专属 10元无门槛券
手把手带您无忧上云