Java 并发 ThreadLocal 详解 ThreadLocal 即线程本地变量的意思,常被用来处理线程安全问题。ThreadLocal 的作用是为多线程中的每一个线程都创建一个线程自身才能用的实例对象,通过线程隔离的方式保证了实例对象的使用安全。在并发编程中,有以下几种方式可以用来避免线程安全问题同步方案加锁(synchronized 和 Lock)通过 CAS (原子类)无同步方案栈封闭(方法的局部变量)本地存储(ThreadLocal)
Java 并发 线程基础 一个进程可以包含多个线程,而多个线程共享进程的资源,并且还有自己的上下文环境。线程安全是指某个方法或某段代码,在多线程中能够正确的执行,不会出现数据不一致或数据污染的情况,我们把这样的程序称之为线程安全的,反之则为非线程安全的。级,优先级越高的线程拥有更高的几率执行,因为线程的优先级只是提供了相对的调度顺序,具体还是要看操作系统的调度算法和策略影响。当多个线程同时在处理某一个问题时,需要协调各个线程之间的工作,否则容易产生线程安全问题。阻塞和等待的区别在于阻塞是被动的,它在等待一个排他锁,而等待是主动的。
Java SPI 机制 SPI (Service Provider Interface)是 Java 内置的一种服务提供发现机制,将功能的实现交给第三方,用来拓展和替换组件。SPI 的核心思想是解耦,将接口的定义和实现分开两部分处理。接口的调用方负责定义接口,而实现则由第三方去实现。SPI 机制允许将功能的实现抽离出原本的模块,在模块化设计中颇为受用。当服务的提供者实现了一种接口之后,需要在自己的 classpath 下的目录新建一个文件,文件名是接口的名称,内容是接口的实现类的全限定名称,每个实现类占一行。
Java 注解机制 Java 注解(Annotation)又称 Java 标注,是 JDK 1.5引入的一种注释机制。注解可以用来标注程序中的类、字段、变量、参数等。注解只是一种注释、标记作用,注解插入到代码中,进而可以达到影响代码运行逻辑的效果,比如可以动态切换数据源、拼接SQL语句、标记接口白名单等。当然,这些效果都是基于自定义注解完成的,需要我们对注解有一个很好的认识,才能使用注解来帮助我们减少重复性代码的开发。在 Java 中,注解是当作一种修饰符来使用的,它被置于被注释项之前,中间没有分号。Java 注解是通过。
Java 反射机制 在我平时的使用中,Java 的反射包括两个方面,一是在运行状态中,动态获取类的信息;一是在运行状态中,动态调用对象的方法。动态获取类的信息就是对于任意一个类,都能获取到这个类的字段、方法、注解相关的信息。动态调用对象的方法指的是对于任意一个对象,通过反射能调用它的任意方法。反射强大而复杂。平时的业务开发用的比较少,但是框架、工具构造的时候用的比较多。因此学习反射可以帮助我们更好的看懂框架的源码。
Java 泛型机制 Java 在 JDK 1.5 的时候引入了泛型( generic ),泛型,同时编译器还加入了机制,可以在编译时发现与泛型声明类型不符合的问题。Java 泛型的本质是,即所操作的数据类型被指定为一个参数。
Kafka系列七存储机制 Kafka 在设计之初就将数据的持久化视为通常情况,关注点放在了吞吐量而不是功能。Kafka 采取简单的读取和内容附加到日志文件中,这种操作的好处是读写都是O1的复杂度,而且读取不影响写入操作。除此之外,数据量的大小对性能几乎没有影响,对于过期的数据也能采取简单方式删除。Kafka 之所以采用这种读写方式,是因为对磁盘的线性读写比随机读写的性能要快得多,磁盘的线性读在有些情况下甚至比内存的随机访问要快。
Kafka系列六集群管理 在这种模式下,对于 f+1 个副本,一个 Kafka topic 能在保证不丢失已经 commit 消息的前提下容忍 f 个副本的失败,在大多数使用场景下,这种模式是十分有利的。事实上,为了容忍 f 个副本的失败,“少数服从多数”的方式和 ISR 在 commit 前需要等待的副本的数量是一样的,但是 ISR 需要的总的副本的个数几乎是“少数服从多数”的方式的一半。为了保证集群的高可用性,Kafka 的分区可以设置为多副本的,这样在某个副本丢失的情况下,可以从其他的副本中获取信息。
Kafka系列四生产者 如果要按照自身的需要去设计分区逻辑,可以自定义一个分区器,只需要实现 Partitioner 接口,然后在启动的时候,指定对应的分区器即可。props.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, "自定义分区器的全限定名");
Kafka系列二消息队列的选择 了解完消息队列的基本信息之后,接下来我们可以考虑消息队列的技术选型问题。目前使用较多的消息队列有 ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ 等,以及数据库Redis 也可以实现消息队列的效果。实际使用中应该使用哪一种呢?解析来我们看一看主流消息队列的特性。
使用插件推荐 Key Promoter X IntelliJ IDEA 是一款功能强大的 IDE,但是由于其功能的复杂性,很多时候我们可能会不知道该如何使用某些功能和对应的快捷键。为了解决这个问题,我们可以使用 Key Promoter X 插件来帮助我们更好地使用 IntelliJ IDEA。是一款免费的 IntelliJ IDEA 插件,它可以在你使用鼠标执行某个操作时提醒你是否有相应的快捷键可以代替鼠标操作。如果你经常使用鼠标操作而不使用快捷键,那么 Key Promoter X 就是为你设计的。
实用插件推荐 CodeGlance Pro Code Glance Pro 是一个用于在侧边栏展示文件整体内容的插件,类似于 Sublime 中的 minimap。通过它可以快速在文件的头部、尾部、中间部分进行跳转。
实用插件推荐 Show Comment 最近发现一款不错的 IDEA 插件 Show Comment,可以辅助显示代码注释。它能在左侧的目录树显示每个文件的类注释,也能在代码中显示每一行的代码注释,前提是你这一行的字段或者方法已经写过注释了。但是要想插件生效的话,写注释的时候要注意使用 Javadoc 规范,见过有些小伙伴喜欢给类的字段写行尾注释,这样 IDEA 读取不到这个字段的注释。
禁用非必需插件,让 IDEA 飞起 IDEA 为我们提供了众多的插件,但是这些插件并不都是必须的。如果电脑的性能不够强,反而会带来一些不必要的资源消耗。因此这里整理了一些不常用的插件,可以通过禁用它们来缓解 IDEA 的运行压力。禁用之前需要注意!!!如果禁用哪个插件导致软件不能正常运行,可以尝试重启 IED 看是否能解决。
java生成word文档 文章首发于个人博客,欢迎访问关注:https://www.lin2j.tech前言Java 要生成 word 文档,可以借助 freemarker 引擎生成。可能很多人不知道,Word 其实可以导出为 xml 文件,而 xml 文件又可以很轻松的转换为 ftl 文件,只需改个后缀名。ftl 是 freemarker 文件的后缀,其内容格式与 xml 没太大差别。而且 freemarker 是一个模版引擎,有自己的语法但是不复杂,非常适合用来生成 html 或者 xml。Freemarker 手