Java 基础笔记
Java基础笔记
CrazyIdeas
辛勤耕耘的码农
展开
-
Java基础之接口回调,传递具体对象的方式,传递lambda表达式的方式,传递引用的方式
随笔,笔记回调,是一种常见的设计模式,可以 指定某个特定事件发生时应该采取的动作。在一些编程语言中,将这个动作通过函数的方式传入,而Java是采用传对象的方式,将动作传递给特定的类。看看代码样例:public class TestCallback { public void testMethod(int n, CallBack callBack){ // 根据 n 是否大于10来 执行不同的动作 if (n > 10){ ca.原创 2020-08-24 23:41:24 · 727 阅读 · 0 评论 -
Java中的线程池,实现原理,线程池的创建,饱和策略,阻塞队列
笔记,读《Java并发编程艺术》的笔记,里面夹杂了一些自己的理解,可能不是很准确,建议阅读原著。合理使用线程池的好处降低资源消耗。降低了频繁创建和销毁造成的消耗。提高响应速度。不必等待线程创建,而是立即执行。提高线程的可管理性。线程池的实现原理首先判断核心线程池里是否都在执行任务。如果不是,就创建一个新的线程来执行任务;如果是,就将任务添加到队列中;如果队列满了,就在线程池中 创建一个新的线程来执行任务;如果线程池也满了,就交给饱和策略来处理任务。从上文中,我们知道线程池里面有一个小的.原创 2020-08-17 10:44:25 · 300 阅读 · 0 评论 -
并发编程基础之Volatile关键字的应用
笔记,读《Java并发编程的艺术》的笔记。本文中除了读书笔记之外,里面还夹杂着一些自己的理解,可能有理解不到位的地方volatile是轻量级的synchronized,它在多处理器开发中保证共享变量的可见性。可见性是当一个线程修改一个共享变量时,其他线程可以读到这个修改的值。volatile不会引起线程上下文的切换和调度。CPU的术语定义内存屏障: 是处理一组处理器指令,用于实现对内存操作的顺序限制。缓冲行: 缓存中可以分配的最小存储单位。原子操作: 不可中断的一个或一系列操作。缓存.原创 2020-08-11 19:58:41 · 182 阅读 · 0 评论 -
Java基础之通过反射 获取Class 对象,获取对象中的字段,方法,构造函数。
随笔,笔记能够分析类能力的程序称为反射。可以用来:在运行时分析类的能力。在运行时查看对象。实现通用的数组操作代码。利用 Method 对象,这个对象很像 C++ 中的函数指针。Class 类一个 Class 对象将表示一个特定类的属性。获取 Class 对象 的方式:// 利用 对象 的 getClass 方法获得ReflectTest test = new ReflectTest(10);Class a = test.getClass();// 通过完整类名 和 使用 .原创 2020-08-11 10:51:33 · 1052 阅读 · 0 评论 -
Java基础之垃圾回收机制基础知识,CMS垃圾收集器和G1收集器
垃圾回收机制为什么要了解垃圾回收机制和内存分配?当需要排查各种内存溢出、内存泄露问题时,当垃圾收集器成为系统达到更高并发量的瓶颈时,我们就必须对这些 自动化(垃圾回收)技术实施必要的监控和调节。如何判断对象是死是活?引用计数器算法:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器加一;当引用失效时,计数器值减一;任何时刻计数器为 零就是不可能被使用的。原理简单,判定高效产生循环引用问题。A->B->C->A 这样 计数器永远不为 零。可达性分析算法:通过称为原创 2020-08-04 13:24:45 · 226 阅读 · 0 评论 -
Java基础之Fork-Join 框架、信号量、障栅(屏障)、同步队列、交换器、倒计时、同步器常用类
随笔,笔记Fork-Join 框架fork-join 可以将一个任务分解为 多个子任务。适用于 密集型计算。提供了两个抽象类:RecursiveTask<T>:计算会生成一个类型为 T 的结果。RecursiveAction:计算不会生成结果。实现 这个两个抽象类的其中一个,并 重载 compute 方法来生成并调用 子任务。public class Counter extends RecursiveTask<Integer> { private int.原创 2020-07-30 16:03:12 · 255 阅读 · 0 评论 -
Java基础之线程池的作用、常用的几种线程池、线程池演示代码、控制任务组及演示代码
随笔,笔记线程池如果程序中创建了大量的声明周期很短的线程,可以考虑使用线程池。线程池中的线程在执行完成任务后,不会死亡,而是等待执行下一次任务。线程池,可以减少并发线程的数目。执行器,有许多静态工厂方法 构建线程池。newCachedThreadPool:如果有空闲线程可用,就立即执行任务;若没哟空闲线程可用,则创建一个新线程。newFixedThreadPool:构建一个 固定大小的线程池。 如果有空闲线程,就执行任务;没有空闲线程就将任务放到 队列中。newSingleThr.原创 2020-07-29 13:06:49 · 162 阅读 · 0 评论 -
Java基础之Callable、Future、FutureTask
随笔,笔记Callable是与 Runable类似的一个接口,它支持参数化,只有一个方法 call。public interface Callable<V> { /** * Computes a result, or throws an exception if unable to do so. * * @return computed result * @throws Exception if unable to compute a re.原创 2020-07-28 23:04:31 · 138 阅读 · 0 评论 -
Java基础之线程安全的集合、原子更新、并发的批操作、写数组拷贝、Arrays的并行、Collections将集合转换为安全集合
随笔,笔记Java为我们提供了 线程安全的集合,如ConcurrentHashMap,ConcurrentSkipListMap,ConcurrentSkipListSet,ConcurrentLinkedQueue,在java.util.concurrent 包里,允许并发地访问数据结构的不同部分来使冲突 最小。使用 遍历来求 集合的大小,当数量庞大时,需要使用 mappingCount() 方法,转换为 long 返回。集合返回的是弱一致性的迭代器:迭代器不能够 确切保证,反映出构造时候的所.原创 2020-07-28 14:27:29 · 351 阅读 · 0 评论 -
Java基础之线程局部变量、锁超时、读写锁、阻塞队列
随笔线程局部变量:为什么要整 局部变量呢?我的理解:局部变量 意味着 不会发生 并发的更新,只有一个线程,能够保证数据 不会遭到破坏。为每个线程都创建局部对象 ,又太浪费了。ThreadLocal 辅助类 为各个线程提供各自的实例。public void showDate(){ ThreadLocal<SimpleDateFormat> local = ThreadLocal.withInitial(()-> new SimpleDateFo.原创 2020-07-21 12:27:22 · 337 阅读 · 0 评论 -
Java基础之synchronized 关键字、Volatile、atomic包下 原子性
随笔有关锁和条件的关键之处:锁用来保护代码片段,任何时刻只能有一个线程执行保护的代码。锁可以管理视图进入被保护代码片段的线程。锁可以拥有一个或多个相关的条件对象。每个条件对象管理那些已经进入被保护的代码段但还不能运行线程。synchronized 关键字public synchronized void showMessage(){ }每个对象 都有一个 内部锁。调用一个 被 synchronized 修饰的方法,线程需要获得内部的对象锁。public sync.原创 2020-07-20 13:09:58 · 167 阅读 · 0 评论 -
Java基础之锁对象、条件对象、死锁现象、编码建议
随笔记,分类于 乱七八糟 下。读《Java 核心技术卷 I》 笔记由于线程之间数据共享,当两个或两个以上的线程共同对共享数据进行存取时,容易造成 讹误 。这种情况被称为竞争条件。锁对象有两种 机制防止代码块受并发访问的干扰,一种是synchronized 关键字,另一种是ReentrantLock 类。...原创 2020-07-18 23:27:04 · 185 阅读 · 0 评论 -
Java基础之创建一个简单线程、中断线程、线程的几个状态、线程优先级、守护线程、未捕获异常处理器
随笔记,分类于 乱七八糟 下。读《Java 核心技术卷I》笔记。多任务:在同一刻运行多个程序的能力。一个程序同时执行多个任务,每个任务称为一个线程。可以同时运行一个以上线程的程序被称为多线程程序。多进程和多线程的区别?本质区别每个进程拥有自己的一整套变量,而线程则共享数据。共享变量使线程之间的通信比进程之间通信更有效、更容易。Thread.sleep(long millis) 方法用于 暂停当前线程的活动。简单创建一个线程步骤将任务代码移到实现了 Runnable 接口的类的 run.原创 2020-07-17 22:21:01 · 183 阅读 · 0 评论