
Java【更新中】
Java开发
努力的SIR
你只管努力,其他的交给天意。
展开
-
Volatile和原子类的异同
Demo: /** * @author NanShan @create * 2020-08-27 19:50 * * Note: * 1.程序并不能正常退出 * 2.修改方法:volatile boolean flag = true; * 3.疑问:为什么在run方法中打印一个东西,程序就能正常退出? */ public class Main extends Thread { boolean flag = true; @Override public void...原创 2021-05-24 15:30:51 · 201 阅读 · 0 评论 -
ClassLoader.getResourceAsStream()详情
Note:后者加/会出现空指针异常...使用过程中一般不加/ 关于classpath:原创 2020-11-02 15:10:29 · 1970 阅读 · 0 评论 -
ThreadLocal实例
如果你定义了一个单实例的java bean,它有若干属性,但是有一个属性不是线程安全的,比如说HashMap。并且碰巧你并不需要在不同的线程中共享这个属性,也就是说这个属性不存在跨线程的意义。那么你不要sychronize这么复杂的东西,ThreadLocal将是你不错的选择。 import java.util.HashMap; public class TreadLocalTest { static ThreadLocal<HashMap> map0 = new ThreadLoc原创 2020-08-29 17:38:56 · 263 阅读 · 0 评论 -
生产者消费者模型(阻塞队列)
public class Main { public static void main(String[] args) { MyResource resource = new MyResource(new ArrayBlockingQueue<>(10)); new Thread(() -> { try { resource.producer(); } catch (Exc原创 2020-08-24 10:09:50 · 149 阅读 · 0 评论 -
手撕布隆过滤器
class BloomFilterDemo { //设置的位集大小 private int defaultSize = 16 << 24; //最大索引位置 private int maxIndex = defaultSize - 1; //建立一个二进制位集 private BitSet bits = new BitSet(defaultSize); /** * 添加元素的方法 * * @param key原创 2020-08-18 15:26:45 · 167 阅读 · 0 评论 -
Java死锁实现
public class Main { public static void main(String[] args) { String lock1 = "lock1"; String lock2 = "lock2"; new Person(lock1, lock2).start(); new Person(lock2, lock1).start(); } } class Person extends Thread {原创 2020-08-17 09:12:25 · 199 阅读 · 0 评论 -
Java-深度理解空指针异常
/** * @author NanShan @create * 2020-07-09 16:09 * * 补充一个知识点: * 空指针异常:调用一个为null的对象的 成员属性或者成员方法时,会出现空指针异常 */ public class Main { public static void main(String[] args) { Person p = new Person(); p = null; System.out.println原创 2020-08-02 14:49:35 · 148 阅读 · 0 评论 -
ArrayList源码分析
底层属性分析 /** * Default initial capacity. * 当我们new一个空参构造器,然后第一次调用add方法时会扩容为10. */ private static final int DEFAULT_CAPACITY = 10; /** * Shared empty array instance used for empty instances. */ private static final Object[原创 2020-07-10 10:15:39 · 362 阅读 · 0 评论 -
动态代理常用的两种方式
基于接口的动态代理 public interface IActor { /** * 基本演出 * * @param money */ void basicActor(float money); /** * 危险演出 * * @param money */ void dangerActor(float money); } public class Actor implements IActor原创 2020-07-09 20:08:13 · 236 阅读 · 0 评论 -
JUC
标准多线程写法,Lock的经典实用方法 //资源类 = 实例变量+实例方法 class Ticket { private int number = 30; // List list = new ArrayList(); Lock lock = new ReentrantLock(); public void sale() { lock.lock(); // 放在了try-finally外面 try { if (numb原创 2020-06-27 09:48:46 · 154 阅读 · 0 评论 -
生产者消费者模型
经典例题:生产者/消费者问题 生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品, 店员一次只能持有固定数量的产品(比如:20),如果生产者试图生产更多的产品,店员 会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;如果店中没有产品 了,店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品。 class Clerk{ ...原创 2020-04-09 21:32:09 · 199 阅读 · 0 评论 -
HashMap源码解析
重要属性分析 /** * 默认初始容量, 当我们new空参构造器,第一次add时会扩容为16 */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 /** * The maximum capacity */ static final int MAXIMUM_CAPACITY = 1 << 30; /** * 默认加载因子0原创 2020-07-30 21:40:11 · 139 阅读 · 0 评论