java类学习
文章平均质量分 90
Joey Liao
这个作者很懒,什么都没留下…
展开
-
java并发 ThreadLocal
多线程充分利用了多核CPU的威力,为我们程序提供了很高的性能。但是有时候,我们需要多个线程互相协作,这里可能就会涉及到数据一致性的问题。数据一致性指问题的是:发生在多个主体对同一份数据无法达成共识。这里的多个主体,可能是多线程,也可能是多个服务器节点。当然了,这里的“多个主体”也可以指朋友之间,夫妻之间,所谓“道不同,不相为谋”,说的就是这个理。提供了线程局部变量,一个线程局部变量在多个线程中,分别有独立的值(副本。原创 2023-03-27 22:17:17 · 399 阅读 · 0 评论 -
java并发-通信工具类
Semaphore翻译过来是信号的意思。顾名思义,这个工具类提供的功能就是多个线程彼此“打信号”。而这个“信号”是一个int类型的数据,也可以看成是一种“资源”。可以在构造函数中传入初始资源总数,以及是否使用“公平”的同步器。默认情况下,是非公平的。// 默认情况下使用非公平 public Semaphore(int permits) {最主要的方法是acquire方法和release方法。acquire()方法会申请一个permit,而release方法会释放一个permit。原创 2023-03-25 16:29:01 · 307 阅读 · 0 评论 -
java并发 AQS
AQS是一个构建锁和同步器的框架(模板)。Semaphore,其他的诸如FutureTask等等皆是基于AQS的。我们也可以使用AQS构建符合自己需求的同步器。原创 2023-03-21 17:34:57 · 198 阅读 · 0 评论 -
分布式锁详解
由于 Redis 集群数据同步到各个节点时是异步的,如果在 Redis 主节点获取到锁后,在没有同步到其他节点时,Redis 主节点宕机了,此时新的 Redis 主节点依然可以获取锁,所以多个应用服务就可以同时获取到锁。所谓可重入锁指的是在一个线程中可以多次获取同一把锁,比如一个线程在执行一个带锁的方法,该方法中又调用了另一个需要相同锁的方法,则该线程可以直接执行调用的方法即可重入 ,而无需重新获得锁。当可重入计数器大于 0 时,则锁被占有,需要判断占有该锁的线程和请求获取锁的线程是否为同一个。原创 2023-03-02 21:54:28 · 657 阅读 · 0 评论 -
分布式ID实现方法
分布式 ID 是分布式系统下的 ID。分布式 ID 不存在与现实生活中,属于计算机系统中的一个概念。我简单举一个分库分表的例子。我司的一个项目,使用的是单机 MySQL。但是,没想到的是,项目上线一个月之后,随着使用人数越来越多,整个系统的数据量将越来越大。单机 MySQL 已经没办法支撑了,需要进行分库分表(推荐 Sharding-JDBC)。在分库之后, 数据遍布在不同服务器上的数据库,数据库的自增主键已经没办法满足生成的主键唯一了。我们如何为不同的数据节点生成全局唯一主键呢?这个时候就需要生成。原创 2023-02-27 21:14:42 · 370 阅读 · 2 评论 -
分布式 CAP & BASE理论
一致性(Consistency) : 所有节点访问同一份最新的数据副本可用性(Availability): 非故障的节点在合理的时间内返回合理的响应(不是错误或者超时的响应)。分区容错性(Partition tolerance) : 分布式系统出现网络分区的时候,仍然能够对外提供服务。网络分区:分布式系统中,多个节点之前的网络本来是连通的,但是因为某些故障(比如部分节点网络出了问题)某些节点之间不连通了,整个网络就分成了几块区域,这就叫网络分区。Basically Available(基本可用)原创 2023-02-18 10:57:56 · 323 阅读 · 0 评论 -
XXL-JOB 极简入门
XXL-JOB 是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。从它登记的接入公司列表 ,可以看到拍拍贷、优信二手车、京东、哈啰出行等知名的互联网公司正在使用中。所以,胖友们是可以放心大胆的在项目中使用。原创 2023-02-13 10:26:10 · 940 阅读 · 0 评论 -
SpringBoot整合Slf4j+logback日志框架
Slf4j的全称是Simple Loging Facade For Java(Java简单日志门面),它仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已。所以单独的Slf4j是不能工作的,必须搭配其他具体的日志实现方案,比如apache的org.apache.log4j.Logger,jdk自带的java.util.logging.Logger等。原创 2023-02-02 21:11:57 · 1282 阅读 · 0 评论 -
Java 定时任务详解
上图的时间轮,第 1 层的时间精度为 1 ,第 2 层的时间精度为 20 ,第 3 层的时间精度为 400。假如我们需要添加一个 350s 后执行的任务 A 的话(当前时间是 0s),这个任务会被放在第 2 层(因为第二层的时间跨度为 20*20=400>350)的第 350/20=17 个时间格子。当我们需要新建一个 3s 后执行的定时任务,只需要将定时任务放在下标为 3 的时间格中即可。上面提到的一些定时任务的解决方案都是在单机下执行的,适用于比较简单的定时任务场景比如每天凌晨备份一次数据。原创 2023-02-02 20:23:28 · 2527 阅读 · 0 评论 -
java 多线程总结
程序:指一段静态的代码,静态对象。进程:是程序的一次执行过程,是系统资源的最小分配单位线程:进程可进一步细化为线程,是时间片的最小分配单位并行:多个CPU同时执行多个任务,比如:多个人同时做不同的事并发:一个CPU(采用时间片)同时执行多个任务,比如秒杀平台,多个人做同件事。原创 2022-09-13 19:44:40 · 90 阅读 · 0 评论 -
idea打jar包与引入jar包
右键jar包,addAsLibrary,就可以正常调用了。将jar包复制进lib。原创 2022-07-26 19:03:28 · 392 阅读 · 0 评论 -
Java常见代理proxy
静态代理public interface Hello { public void say();}public class HelloImpl implements Hello{ public void say() { System.out.println("hello"); }}现在想在hello前后做些事:使用代理public class...原创 2020-04-28 17:33:20 · 167 阅读 · 0 评论 -
ThreadLocal类实现
ThreadLocal是什么?ThreadLocal是java多线程并发中用到的一个类,采用了空间换时间的方法,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。从线程的角度来看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思。ThreadLocal类的接口很简单,只有4个方法:...原创 2020-02-26 20:05:41 · 289 阅读 · 0 评论