Java
Munt
这个作者很懒,什么都没留下…
展开
-
如何处理线程的返回值
实现的方法有三种 主线程等待法 让主线程使用while循环不断的去查询成员变量, 直到成员变量符合条件为止 缺点 当需要等待的线程多起来之后, 代码就会臃肿 循环一次的时间不好确定 使用Thread的join方法阻塞当前线程, 直到子线程执行完毕 public class Demo01 implements Runnable { private static String value; @Override public void run()原创 2021-10-07 18:13:18 · 697 阅读 · 0 评论 -
Java BIO NIO AIO【IO模式]——记录
参考文章:Java面试常考的 BIO,NIO,AIO 总结除了 AIO 其他的 IO 类型都是同步的,这一点可以从底层IO线程模型解释,推荐一篇文章:《漫话:如何给女朋友解释什么是Linux的五种IO模型?》原创 2021-02-03 16:45:39 · 75 阅读 · 0 评论 -
Java如何安全终止一个线程:(提供两种方式参考)
Thread类提供了一个线程终止的方法stop()方法,但是现在在JDK源码中发现,stop()方法已经被废弃。主要原因是:stop()方法强制终止一个正在执行的线程,可能会造成数据不一致的问题。所以常用的线程终止有两种方式:1.使用标志位退出线程2.使用interrupt终止线程(注意: 单独调用Interrupt()并不会终止线程, 需要使用Thread.isInterrupted()判断线程是否被中断,然后进入中断处理逻辑代码)1. 使用标志位退出线程这种也是最常用的方法,就是定义原创 2021-02-01 21:57:39 · 902 阅读 · 0 评论 -
Java静态内部类
如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为static。这通常称为嵌套类(nested class)。Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部类是static的时,就不是这样了。嵌套类意味着:1.嵌套类的对象,并不需要其外围类的..转载 2021-01-27 10:00:59 · 417 阅读 · 0 评论 -
抽象类不能实例化!
抽象类的确不能实例化。抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的。但是往往人们会被以下这种格式//匿名内部类new TestAbs(){ 要重写的抽象方法}实际上是实例化一个它的子类。其实就相当于下面这样,只是匿名不匿名的区别。class Test extends TestAbs{ @Override public void printMessage2(String msg){ System.out.println(m...原创 2021-01-26 16:08:53 · 2370 阅读 · 0 评论 -
URI方法说明
public final classURIextendsObjectimplementsComparable<URI>,Serializable表示一个统一资源标识符(URI)引用。细分的话,字符串形式的URI引用(以下简写为"URI")语法如下[scheme:][//authority][path][?query][#fragment]其中,:、/、?和#代表它们自身。分层URI的特定于方案的部分包含方案和片段部分之间的字符。impor...原创 2021-01-07 10:02:45 · 1119 阅读 · 0 评论 -
Java泛型通配符<? extends T>和<? super T>
<? extends T>和<? super T>是Java泛型中的“通配符”和“边界”的概念。<? extends T>:是指“上界通配符”<? super T>:是指“下界通配符”1. 为什么要用通配符和边界?在使用泛型的过程中,经常出现一种很别扭的情况,举个例子:我们有Fruit类和它的派生类Apple类.class Fruit {}class Apple extends Fruit {}然后有一个简单的容器:Plate类。..原创 2021-01-02 16:05:30 · 589 阅读 · 1 评论 -
ThreadLocal 工作原理
1.ThreadLocal 介绍首先,它是一个数据结构,有点像HashMap,可以保存"key : value"键值对,但是一个ThreadLocal只能保存一个,并且各个线程的数据互不干扰,它是一个以ThreadLocal对象为键、任意对象为值的存储结构。可以通过set(T)方法设置一个值,在当前线程下以get()方法获取到原先设置的值。ThreadLocal<String> threadLocal = new ThreadLocal();threadLocal.set("thre原创 2020-12-30 16:08:52 · 209 阅读 · 1 评论 -
Java for循环详解
对于java中的for循环,我们用的最多的无非就是下面这个语句:for(int i = 0; i < 10; i++) { System.out.println(i);}但是对于for循环来说,它也有很多变体,如果不清楚for循环的结构原理,遇上一些变体的for循环,可能一时不太明白它的含义,for循环虽然有很多变体,但都离不开括号内3条语句的模式(除了增强for循环模式例外)for循环的结构: for(语句A; 语句B; 语句C){ //循环体...原创 2020-11-03 14:53:13 · 6008 阅读 · 0 评论 -
Java异常简单处理
1.直接throw 抛出,不往下执行 /** * 直接throw 抛出 */ public static void main(String[] args) { String str = null; System.out.println("before"); checkNotNull(str); //1.直接抛出异常,不往下执行 System.out.println("after"); } p.原创 2020-12-07 23:29:23 · 136 阅读 · 0 评论 -
Gson & 对象
日常工作中,在调用相关接口时候,常会要求将一个对象封装成json字符串作为参数传递过去给服务端:往往使用方法如下: public String toJsonString(Object object) { if (object != null) { Gson gson = new Gson(); return gson.toJson(object); } return null; }为方便创建一个简单对象举例:public class Person { p原创 2020-12-07 23:09:18 · 279 阅读 · 1 评论 -
Java 泛型和object比较
方法返回值前的<T>的左右是告诉编译器,当前的方法的值传入类型可以和类初始化的泛型类不同,也就是该方法的泛型类可以自定义,不需要跟类初始化的泛型类相同我们通过一段代码比较来看下就明白了class Show<T> { public void print1(T t) { System.out.println(t); } public <T> void print2(T t) { System.out.println(t); }} pu.转载 2020-12-01 15:47:34 · 485 阅读 · 0 评论 -
Java 子类构造函数默认调用父类构造函数super
一、继承中的构造方法的执行顺序创建对象时,会先自动调用父类的构造函数,再自动调用子类的构造函数。 解释:super()表示父类的构造函数并会调用于参数相对应的父类中的构造函数。子类中,它在调用父类中空参数的构造函数。因为子类继承父类,会继承到父类中的数据,所以必须要看父类是如何对自己的数据进行初始化的。因此子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程。二、子类的所有构造函数中的第一行,其实都有一条隐身的语句super();1、父类有空参:没有有参构造时系统默认给出了,或.原创 2020-11-25 22:32:08 · 8991 阅读 · 0 评论 -
Java中使用线程池与不使用线程池的效率比较
package com.test.utils;/** * 测试使用线程池和未使用线程池的执行效果 */import java.util.LinkedList;import java.util.List;import java.util.Random;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurre.原创 2020-11-23 17:44:20 · 672 阅读 · 0 评论 -
java中的四种代码块
在java中用{}括起来的称为代码块,代码块可分为以下四种:一.简介1.普通代码块:类中方法的方法体2.构造代码块:构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行。3.静态代码块:用static{}包裹起来的代码片段,只会执行一次。静态代码块优先于构造块执行。4.同步代码块:使用synchronized(){}包裹起来的代码块,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性。同步代码块需要写在方法中。二.静态..转载 2020-11-23 10:50:17 · 340 阅读 · 0 评论 -
LruCache原理和用法与LinkedHashMap
一.LruCache算法LruCache算法就是Least Recently Used,也就是最近最少使用算法。他的算法就是当缓存空间满了的时候,将最近最少使用的数据从缓存空间中删除以增加可用的缓存空间来缓存新内容。这个算分的内部有一个缓存列表。每当一个缓存数据被访问的时候,这个数据就会被提到列表头部,每次都这样的话,列表的尾部数据就是最近最不常使用的了,当缓存空间不足时,就会删除列表尾部的缓存数据。二.LruCache部分源码Least Recently Used,最近最少使用下面只原创 2020-11-21 17:18:37 · 271 阅读 · 0 评论 -
HTTP断点续传原理(Java)
断点续传,其实也就是要从文件已经下载的地方开始继续下载。在以前版本的 HTTP 协议是不支持断点的,HTTP/1.1 开始就支持了。一般断点下载时才用到 Range 和 Content-Range 实体头。打个比方,浏览器请求服务器上的一个文件时,所发出的请求如下:假设服务器域名为 wwww.sjtu.edu.cn,文件名为 down.zip。GET /down.zip HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, im转载 2020-11-19 22:42:38 · 343 阅读 · 0 评论