java基础
文章平均质量分 61
java基础
未见山
天予不取,必受其咎。
展开
-
@FunctionalInterface注解
FunctionalInterface 是 Java 中的一个注解,它用于标记函数式接口。函数式接口是一个只包含一个抽象方法的接口,它可以用作 Lambda 表达式的类型函数式接口:函数式接口是具有单个抽象方法的接口。这个抽象方法定义了接口的功能,可以由 Lambda 表达式提供具体的实现。函数式接口是函数式编程的基础,在 Java 8 中引入了 Lambda 表达式以便更容易地使用它们。原创 2023-10-31 15:02:18 · 377 阅读 · 0 评论 -
CountDownLatch和CyclicBarrier
CountDownLatch(减法)CountDownLatch允许一个或者多个线程去等待其他线程完成操作。CountDownLatch countDownLatch = new CountDownLatch(10); for(int i=1;i<=10;i++){ new Thread(()->{ System.out.println(Thread.currentThread().getName()+"玩家准备完成")原创 2022-04-18 15:31:34 · 253 阅读 · 0 评论 -
java引用方式
1. 强引用当内存不足,JVM开始垃圾回收,对于强引用的对象,就算是出现OOM也不会对该对象进行回收。强引用是最常见的普通对象引用,只要还有强引用指向一个对象,就表明这个对象还活着,垃圾回收器就不会回收这种对象。在Java中,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用时,它处于可达状态,它是不可能被垃圾回收机制回收的。因此强引用是造成Java内存泄漏的主要原因之一。对于一个普通对象,如果没有其它引用关系,只有超过了引用的作用域或者显式地将强引用赋值为null,一般热认为原创 2022-03-21 16:53:52 · 437 阅读 · 1 评论 -
Java排序算法
冒泡排序两个数比较大小,较大的数下沉,较小的数冒起来。 /** * *冒泡排序 * * @param nums */ public static void bubbleSort(int[] nums) { for (int i = 0; i < nums.length; i++) { boolean flag = false; for (int j = 0; j < nums.原创 2022-03-01 17:48:01 · 399 阅读 · 0 评论 -
类的初始化加载顺序
java类及实例初始化顺序1、静态变量、静态代码块初始化顺序级别一致,谁在前,就先初始化谁。从上而下初始化(只在类加载时,初始化一次)2、非静态变量、非静态代码块初始化顺序级别一致,谁在前,就先初始化谁。从上而下初始化(只要对象实例化一次,就初始化一次)3、构造方法在非静态变量、非静态代码块之后执行。4、子类静态变量、静态代码块在父类的静态变量、静态代码块之后执行。5、子类非静态变量、非静态代码块在父类构造方法之后执行。5、子类构造方法在父类构造方法之后执行。6、静态方法不会被子类重写。父类原创 2022-02-23 17:12:35 · 1372 阅读 · 0 评论 -
springboot中运用线程池
1.线程池配置类package com.example.demo.asyn;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.EnableAsync;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.c原创 2021-08-31 14:17:21 · 171 阅读 · 0 评论 -
类加载器及初始化顺序和双亲委派
类加载器启动类加载器(BootstrapClassLoader)负责将 Java_Home/lib下面的类库加载到内存中扩展类加载器(ExtClassLoader)是由 Sun 的 ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将Java_Home /lib/ext或者由系统变量 java.ext.dir指定位置中的类库加载到内存中。应用类加载器(AppClassLoader)AppClassLoader 会加载 jav原创 2021-04-20 16:54:39 · 330 阅读 · 1 评论 -
Java基础之线程篇
什么是线程?线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。线程的状态:新建(NEW):新创建了一个线程对象。可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。阻塞(BLOCKED):阻塞原创 2021-03-13 22:10:17 · 312 阅读 · 1 评论 -
阻塞队列(BlockingQueue)
阻塞队列1.什么是阻塞队列?阻塞队列首先是一个队列,当队列是空的时候,从队列获取元素的操作将会被阻塞,当队列是满的时候,从队列插入元素的操作将会被阻塞。 线程1往队阻塞列里添加元素,线程2从阻塞队列中移除元素。 试图从空队列里移除元素的线程2(包括其他线程)会被阻塞,直到线程1(或其他线程)往队列里新增元素。 试图往已满的阻塞队列里新增元素的线程1(包括其他线程)会被阻塞,直到线程2(或其他线程)移除一个(或多个)是阻塞队列变得空闲才能继续新增元素。 至于何时挂起线程原创 2021-03-01 15:41:42 · 1701 阅读 · 1 评论 -
volatile关键字详解
1.概念volatile是java虚拟机提供的轻量级的同步机制,有三大特性:可见性,不保证原子性,禁止指令重排。1.可见性在了解可见性之前,你首先要知道JMM(java内存模型)。JMM规定了所有的变量都存储在主内存(Main Memory)中。每个线程还有自己的工作内存(Working Memory),线程的工作内存中保存了该线程使用到的变量的主内存的副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量。不同的线程之间也无法直接访问对方工作内存中原创 2021-02-11 19:44:40 · 2710 阅读 · 11 评论 -
链表相关实现
链表类package com.sk.Tree;public class ListNode { int val; ListNode next; ListNode() {} ListNode(int x) { val = x; } ListNode(int val, ListNode next) { this.val = val; this.next = next; } public int getVal() {原创 2021-01-06 17:14:33 · 168 阅读 · 0 评论 -
File与byte数组和inputstream相互转换
File工具类与byte数组和inputstream转换package com.sk.Util;/** * *sk */import java.io.*;import java.nio.channels.FileChannel;public class fileUtils { /** * *byte数组转inputstream * @param bytes * @return */ public static InputStream原创 2020-10-27 11:40:47 · 4865 阅读 · 0 评论