java基础知识学习
naruto227
你的假装努力,欺骗的只有你自己
展开
-
Map中的computeIfAbsent方法
文章目录1、概述2、代码示例2.1 示例12.2 示例22.2 示例3 1、概述 在JAVA8的Map接口中,增加了一个computeIfAbsent,方法签名如下: default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) Function是一个函数式接口 R apply(T t); 此方法首先判断缓存map中是否存在指定的key值,如果不存在,会自动调用mappingFunctio原创 2021-02-01 14:01:37 · 11924 阅读 · 0 评论 -
Java多线程详解(十二)------ SimpleDateFormat非线程安全
文章目录1. 异常测试2. 非线程安全原因3. 解决方法3.1 将SimpleDateFormat定义成局部变量3.2 使用ThreadLocal3.3 使用DateTimeFormatter代替SimpleDateFormat 1. 异常测试 public class SimpleDateFormatTest { private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");原创 2020-12-21 19:57:44 · 151 阅读 · 0 评论 -
Java多线程详解(十一)------ 单例模式与多线程
文章目录1. 立即加载/“饿汉模式”2. 延迟加载/“懒汉模式”2.1 延迟加载/“懒汉模式”的解决方案3. 使用静态内置类实现单例4. 序列化和反序列化的单例模式实现5. 使用enum枚举数据类型实现单例模式 1. 立即加载/“饿汉模式” 立即加载就是使用类的时候已经将对象创建完毕。 public class MyObject { // 立即加载方式==饿汉模式 private static MyObject myObject = new MyObject(); private原创 2020-12-21 19:56:40 · 132 阅读 · 0 评论 -
Java多线程详解(十)------ 定时器
文章目录1 定时器Timer的使用1.1 schedule(TimerTask task, Date time)1.2 schedule(TimerTask task, Date firstTime, long period)1.3 schedule(TimerTask task, long delay)1.4 schedule(TimerTask task, long delay, long period)1.5 具有追赶特性的scheduleAtFixedRate 1 定时器Timer的使用 Timer原创 2020-12-19 16:16:58 · 260 阅读 · 1 评论 -
Java多线程详解(九)------ Lock的使用
文章目录1 使用ReentrantLock类1.1 使用Condition实现等待/通知1.2 实现生产者/消费者1.3 公平锁与非公平锁1.4 部分API介绍1.5 交替打印ABC2 使用ReentrantReadWriteLock类 ReentrantLock类的使用 ReentrantReadWriteLock类的使用 1 使用ReentrantLock类 ReentrantLock类也能达到同样的效果,实现线程之间同步互斥,并且在扩展功能上也更加强大,比如具有嗅探锁定、多路分支通知等,使用上也比原创 2020-12-18 17:32:08 · 161 阅读 · 1 评论 -
Java多线程详解(八)------ ThreadLocal和InheritableThreadLocal
文章目录1 类ThreadLocal的使用1.1 验证线程变量的隔离性1.2 解决get()返回null问题1.3 实现机制2 类InheritableThreadLocal的使用 1 类ThreadLocal的使用 变量值的共享可以使用public static变量的形式,所有的线程都是用同一个public static变量。而ThreadLocal主要解决的就是每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放的盒子,盒子中可以存储每个线程的私有数据。 1.1 验证线程变量的隔离性 pu原创 2020-12-16 15:59:53 · 173 阅读 · 0 评论 -
Java多线程详解(七)------ 方法join的使用
文章目录1 join使用方式1.1 join与异常1.2 方法join(long)与sleep(long)的区别 1 join使用方式 若主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就要用到join,它的作用是等待线程对象销毁。 public class MyThread extends Thread { @Override public void run() { try { int secondVal =原创 2020-12-15 20:12:00 · 163 阅读 · 0 评论 -
Java多线程详解(六)------ 线程间通信(等待通知及管道流)
文章目录1 等待/通知机制1.1 不使用wait/notify机制实现线程间通信1.2 等待wait/通知notify机制的实现1.3 方法wait()锁释放与notify()锁不释放1.4 方法wait(long)的使用2 生产者/消费者模式实现3 通过管道进行线程间通信3.1 字节流3.2 字符流 1 等待/通知机制 A的执行需要依赖于B的一些条件,A进入等待状态wait,B持续执行,当达到A期望的条件时,通知A继续执行任务notify。这就是线程间的通信。 1.1 不使用wait/notify机制原创 2020-12-07 16:02:08 · 381 阅读 · 0 评论 -
泛型
泛型 文章目录泛型泛型方法泛型类类型通配符 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 泛型方法 声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的)。 public static <T> void sort(T[] a, Comparator<? super T> c) {} 每一个类型参数...原创 2020-03-14 12:26:45 · 112 阅读 · 0 评论