随笔分类 - Java基础
摘要:执行函数:CAS (V, E ,N) V表示要更新的变量 E表示预期值 N表示新值 如果V值等于E值,则将V的值设为N。若V值和E值不同,则说明已经有其他线程做了更新,则当前线程要么什么都不做,要么循环检测V与E是否一致 V表示要更新的变量 E表示预期值 N表示新值
阅读全文
摘要:200 请求成功 304 从缓存中读取 302 + 响应头中定义location: 重定向
阅读全文
摘要:双向链结构,可以参考数据结构 https://www.cnblogs.com/pickKnow/p/9593069.html
阅读全文
摘要:1,ArraList 底层是将数据存入在一个Object[] elementData 数组里面的 2,在JDK 之后,才将elementData 默认大小10 放在add 方法里面 3, 存在ArrayList数组,往里面添加元素: 如果数组的实际容量 + 1 大于 数组的存储容量的时候,就开始扩容
阅读全文
摘要:数据库连接池原理基本原理在内部对象池中,维护一定数量的数据库连接,并对外暴露数据库连接的获取和返回方法。 如外部使用者可通过getConnection方法获取数据库连接,使用完毕后再通过releaseConnection方法将连接返回,注意此时的连接并没有关闭,而是由连接池管理器回收,并为下一次使用
阅读全文
摘要:https://www.cnblogs.com/hongmoshui/p/7994759.html
阅读全文
摘要:浅复制: 测试: 深复制实现方式一:引用类型也分别clone 深复制实现方式二: 对象实现Serializable 接口,对象里面的对象也必须实现Serializable
阅读全文
摘要:http://ifeve.com/disruptor/
阅读全文
摘要:public class App3 { public static void main(String[] args) { Task task = new Task(); Thread t1 = new Thread(task); Thread t2 = new Thread(task); t1.st
阅读全文
摘要:1 ,重入锁,也叫做递归锁。 指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。 ReentrantLock 和synchronized 都是重入锁,ReentrantLock 是轻量级锁,synchronized是重量级锁 也可以用ReentrantLock 来锁
阅读全文
摘要:多线程不管是extends Thread 还是 implements Runnable 都是要重写run 方法来实现,这两种方式子线程都没有返回值。 如果要实现主线程对子线程的监听,让子线程有返回值,可以用implememts Callable<T> 方式: Future 模式的核心:去除了主函数的
阅读全文
摘要:什么是线程池Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即
阅读全文
摘要:1,接口的方法没有方法体(JDK1.8之前),JDK1.8之后也会有默认的方法体,而抽象类可以有非抽象的方法,有方法体(非抽象方法) 2,接口的方法的访问修饰符都是public,抽象类的抽象方法可以有public、protected和default这些修饰符 3,抽象类中可以有普通成员变量,接口中没
阅读全文
摘要:1,String 是不可变类 immutable 不可变类:所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。如JDK内部自带的很多不可变类:八大包装类和String等。 可变类:相对于不可变类,可变类创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类。 以Stri
阅读全文
摘要:wait: 必须暂定当前正在执行的线程,并释放资源锁,让其他线程可以有机会运行 notify/notifyall: 唤醒因锁池中的线程,使之运行 对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。 sleep()方法导致了程序暂停执
阅读全文
摘要:重排序 数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a = 1;b = a; 写一个变量之后,再读这个位置。 写后写 a = 1;a = 2; 写一个变量之后,再写这个变量。 读后写
阅读全文
摘要:1,可见性也就是说一旦某个线程修改了该被volatile修饰的变量,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,可以立即获取修改之后的值。 在Java中为了加快程序的运行效率,对一些变量的操作通常是在该线程的寄存器或是CPU缓存上进行的,之后才会同步到主存中,而加了volatile修
阅读全文
摘要:原子性、可见性、有序性 什么是原子性 即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 一个很经典的例子就是银行账户转账问题: 比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。这2个操作必须要具备原子性才能
阅读全文
摘要:1,Java 线程之间的通信由Java 内存模型(JMM)控制。JMM决定一个线程对共享变量的写入时,能对另一个线程可见。 从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系: 线程之间的共享变量存储在主内存(main memory)中, 每个线程都有一个私有的本地内存(local memor
阅读全文
摘要:1,ThreadLocal 不是“本地线程”的意思,而是Thread 的局部变量。每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本 2,提供的接口方法 • void set(Object value)设置当前线程的线程局部变量的值。 •
阅读全文