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