- 博客(81)
- 资源 (9)
- 收藏
- 关注
原创 Spring Cloud 5大组件
Spring Cloud核心组件:EurekaSpring Cloud核心组件:FeignSpring Cloud核心组件:RibbonSpring Cloud核心组件:HystrixSpring Cloud核心组件:Zuul一、业务场景介绍先来给大家说一个业务场景,假设咱们现在开发一个电商网站,要实现支付订单的功能,流程如下: 创建一个订单之后,如果用户立刻支付了这个订单,我们需要将订单状态更新为“已支付” 扣减相应的商品库存 通知仓储中心,进行发货
2020-10-10 16:49:52
694
2
原创 什么是事务?事务的四个特性以及事务的并发问题
什么是事务?事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。可以通俗理解为:就是把多件事情当做一件事情来处理,好比一条绳上的蚂蚱,同生共死。一、事务的基本要素(ACID)原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。 一.
2020-10-10 10:10:37
1212
1
原创 RabbitMQ 运行机制
大白话:RabbitMQ一个消息是如何从生产者到达消费者呢?第一步:生产者(Producer)生产一条消息(Message),准备发布到某个队列(Queues)上第二步:生产者(Producer)将消息发送给Broker,也就是消息代理,也就是我们的服务器第三步:消息代理收到消息后,要将消息给到一个合适的交换器(Exchange),交换器是和消息队列绑定(Bindings)的(服务器中会有多个交换器和消息队列他们可以相互进行绑定)第四步:交换器根据消息携带过来的路由键(key),来最终确
2020-08-19 00:24:09
405
原创 消息中间件的主要作用和基本概念
大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力异步处理例如用户注册需要发送注册邮件和注册短信的场景方式1:传统做法串行调用,数据库>邮件>短信一套下来,需要150秒相应用户,太慢方式2:分两个线程分别去发邮件和短信,需要响应100ms,还是有点慢方式3:数据库写入成功后,立即响应用户,然后将发邮件和发短信作为任务写入消息队列,慢慢再消化。用户体验最佳应用解耦例如下图,订单系统实时调用库存接口来操作库存显然是不可取的,在高并发场景下,应用间耦合性太
2020-08-18 23:46:51
5565
2
原创 Docker 的安装及配置aliyun加速器
联网情况下,一键安装命令:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun参考:https://www.runoob.com/docker/centos-docker-install.html安装成功后,启动命令:systemctl start docker查看启动状态,running表示启动成功systemctl status docker添加aliyun加速器..
2020-08-13 22:56:30
474
原创 Linux 硬件信息速查
目录一、查看服务器硬件信息(1)查看服务器型号、序列号(2)查看主板型号(3)查看BIOS信息(4)查看内存槽和内存条(5)查看网卡信息二、查看CPU信息(1)查看cpu型号(2)查看系统中实际物理CPU的数量(物理)(3)系统中实际物理CPU的数量(核数)(4)查看每个物理CPU中core的个数(即核数)(5)查看CPU的主频(6)查看CPU的详细信息(7)查看CPU的相关信息(常用)(8)查看cpu运行位数(常用)(9)查看cpu是否.
2020-08-13 01:01:05
775
原创 Spring Boot 最常用注解
@SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用@EnableAutoConfiguration开启自动配置功能;@SpringBootConfiguration标注在某个类上,表示这是一个Spring Boot的配置类@Controller 标注当前类为一个controller层的类@RestController 等同(@Controller +@ResponseBody)@Service标注当前类为一个service层...
2020-07-26 23:24:15
97
原创 Eclipse 2020 如何配置Tomcat服务器
新下载的 Eclipse 2020-03 版本,居然无法配置Tomcat服务器 !!!发现 Window--Preferences中找不到Server选项 !原因:缺少JavaEE组件解决方法:Help -> install New SoftwareWork with下拉选择2020-03-http......... ->勾选Web,XML,Java EE and OSGi Enterprise Development ->一路点击 Next...
2020-06-12 00:34:06
9123
9
原创 eclipse 2020 安装svn
第一步:Subversive-4.0.5.I20170425-1700.zip点击下载,然后解压放到dropins文件夹下第二步:Subversive-connectors-allplatforms-6.0.4.I20161211-1700.zip打开Ecilpse, 选择Help,点击Install New Software,选择Add, 在弹出框选择Archive...然后选择刚才下载的Subversive-connectors-allplatforms-6.0.4.I2016.
2020-06-12 00:09:50
2126
原创 java 根据行号读取文件内容
Java 8解决方案:对于小文件:Stringline32=Files.readAllLines(Paths.get("aaa.txt")).get(12);对于大型文件:Stream<String> lines = Files.lines(Paths.get("D:\\Desktop\\aaa.txt"));String s = lines.skip(12).findFirst().get();System.out.println(s);...
2020-06-10 16:37:21
840
原创 简单理解AQS ( 抽象的队列同步器)
AbstractQueuedSynchronizer 类如其名,抽象的队列式的同步器, AQS 定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的 ReentrantLock/Semaphore/CountDownLatch。它维护了一个 volatile int state(代表共享资源)和一个 FIFO(先进先出)线程等待队列(多线程争用资源被阻塞时会进入此队列)。这里 volatile 是核心关键词,具体 volatile 的语义,在此不述。 state 的访问方.
2020-06-03 22:28:10
374
原创 Java 中用到的线程调度方式以及调度算法
线程调度方式抢占式调度抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制,系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至某些线程得不到执行的时间片。在这种机制下,一个线程的堵塞不会导致整个进程堵塞。协同式调度协同式调度指某一线程执行完后主动通知系统切换到另一线程上执行,这种模式就像接力赛一样,一个人跑完自己的路程就把接力棒交接给下一个人,下个人继续往下跑。线程的执行时间由线程本身控制,线程切换可以预知,不存在多线程同步问题,但
2020-06-02 23:47:00
4370
1
原创 synchronized 和 ReentrantLock 的区别
两者的共同点:1. 都是用来协调多线程对共享对象、变量的访问2. 都是可重入锁,同一线程可以多次获得同一个锁3. 都保证了可见性和互斥性两者的不同点:1. ReentrantLock 显示的获得、释放锁(手动挡), synchronized 隐式获得释放锁(自动挡)2. ReentrantLock 可响应中断、可轮回, synchronized 是不可以响应中断的,为处理锁的不可用性提供了更高的灵活性3. ReentrantLock 是 API 级别的, synchronized 是 J
2020-06-02 23:06:43
471
原创 sleep 与 wait 区别
1. 对于 sleep()方法,我们首先要知道该方法是属于 Thread 类中的。而 wait()方法,则是属于Object 类中的。2. sleep()方法导致了程序暂停执行指定的时间,让出 cpu 给其他线程,但是他的监控状态依然保持着,当指定的时间到了又会自动恢复运行状态。3. 在调用 sleep()方法的过程中, 线程不会释放对象锁。4. 而当调用 wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用 notify()方法后本线程才进入对象锁定池准备获
2020-06-02 22:32:18
171
原创 自旋锁
自旋锁的提出背景由于在多处理器环境中某些资源的有限性,有时需要互斥访问(mutual exclusion),这时候就需要引入锁的概念,只有获取了锁的线程才能够对资源进行访问,由于多线程的核心是CPU的时间分片,所以同一时刻只能有一个线程获取到锁。那么就面临一个问题,那么没有获取到锁的线程应该怎么办?通常有两种处理方式:一种是没有获取到锁的线程就一直循环等待判断该资源是否已经释放锁,这种锁叫做自旋锁,它不用将线程阻塞起来(NON-BLOCKING);还有一种处理方式就是把自己阻塞起来,等待重新调度请求
2020-06-02 01:32:38
1214
原创 CAS无锁机制
什么是CAS?CAS:Compare and Swap,即比较再交换。jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。CAS算法理解对CAS的理解,CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什.
2020-06-02 01:04:18
752
原创 读写锁
相比Java中的锁(Locks in Java)里Lock实现,读写锁更复杂一些。假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读或写(译者注:也就是说:读-读能共存,读-写不能共存,写-写不能共存)。这就需要一个读/写锁来解决这个问题。Java5在java.util.concurrent包中已经包含了读写锁。
2020-06-02 00:09:09
186
原创 重入锁
锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利。重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响,锁向下进行了传递。在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁。import java.util.concurrent.locks.ReentrantLock;pub
2020-06-01 23:38:10
121
原创 悲观锁与乐观锁
悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。以淘宝下单过程中扣减库存的需求说明一下悲观锁的使用:悲观锁使用以上,在对id.
2020-06-01 23:04:22
200
原创 oracle 数据泵导入导出(linux)
1、手动创建目录"-P"表示,没有/home/oracle/目录则自动创建mkdir -p /home/oracle/export2、对文件夹赋予 777 权限chmod -R 777 /home/oracle/export3、切换到oracle用户su - oracle4、数据库管理员登录oraclesqlplus / as sysdba5、创建导出逻辑目录data_dir为目录名,'/home/oracle/export'为实际目录...
2020-05-28 19:17:49
2132
2
原创 oracle 批量清理表数据存储过程
CREATE OR REPLACEPROCEDURE "TRUNCATETABLE" AS BEGIN FOR i IN ( SELECT table_name FROM user_tables T WHERE T .table_name = 'PSG_DETAIL_ENTER' OR T .table_name = 'PSG_MESSAGEINFO_ENTER' OR T .table_name = 'PSG_CHECKERROR_ENTER'.
2020-05-28 15:23:48
833
原创 oracle 给表空间增加多个数据文件
当项目数据量大的时候,避免不了表空间不够用的情况,这个时候就需要挂载多个表空间文件,来进一步扩大容量。下面演示一下,从创建表空间到绑定用户并赋权使用的全流程:PANDA是我的用户名 MYSPACE是表空间名称 MYSPACE_temp是临时表空间名称 .dbf结尾为数据文件1、创建数据表空间初始大小10g,每次自动增长100mcreate tablespace MYSPACE datafile '/home/oracle_datafile/MYSPACE01.dbf' size 10.
2020-05-28 15:13:21
9789
1
原创 合理配置线程池
要想合理的配置线程池,就必须首先分析任务特性,可以从以下几个角度来进行分析:一、任务的性质:CPU密集型任务,IO密集型任务和混合型任务。花费了绝大多数时间在计算上称为计算密集型(CPU密集型)computer-bound花费了绝大多数时间在等待I/O上称为I/O密集型,I/O-boundCPU密集型时,任务可以少配置线程数,大概和机器的cpu核数相当,这样可以使得每个线程都在执行任务。 IO密集型任务则由于需要等待IO操作,线程并不是一直在执行任务,则配置尽可能多的线程,如2*Ncpu。
2020-05-26 23:48:08
150
1
原创 线程池原理分析
什么是线程池?Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。但是,要做到合理利用线程池,必须对其实现原理了如指掌。
2020-05-25 23:51:12
626
原创 多线程之并发队列
并发队列在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。ConcurrentLinkedDequeConcurrentLinkedQueue:是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常ConcurrentLinkedQueue性能好于BlockingQueue.它是一个基于链接节点的无界线程安全队列。该队列的元素..
2020-05-25 22:39:07
499
原创 了解多线程常用的并发包
CountDownLatchCountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。public class Test002 { public static void main(String[] args) throws InterruptedException { System.out.println("等待子线程
2020-05-25 22:30:32
293
原创 正确解决 win10 触摸板容易误触问题
如图打开:设置-设备-触摸板-取消勾选连接鼠标时让触摸板保持打开状态这样设置之后,当有鼠标连接的时候,系统会关闭触摸板,反之,当拔掉鼠标时,触摸板随之恢复!
2020-05-22 09:02:47
3631
1
原创 为什么Vector、HasTable是线程安全的?ConcurrentHashMap 分段锁?
Vector源码类add方法:get方法:HashTable源码类put方法:get方法:他们都有一个共同点都加了同步函数,来保证线程安全因为HashTable的读写都是同步的,所以多线程效率非常低,jdk1.5后出现了他的替代品ConcurrentHashMapConcurrentMap接口下有俩个重要的实现:ConcurrentHashMapConcurrentskipListMap(支持并发排序功能。弥补ConcurrentHashMa...
2020-05-18 23:38:37
802
原创 idea 2020 乱码问题解决方法
重点一打开设置,按下图操作重点二近几年的新版idea,不再认可从文件中直接编辑参数而是,打开帮助,选择自定义vm选项在文件中追加-Dfile.encoding=UTF-8重点三在菜单栏找到run->Edit Configrations,设置 vm option为 -Dfile.encoding=utf-8重点四如图依次打开,设置Additional command line parameters选项为-encoding utf-8...
2020-05-09 21:31:24
9992
5
原创 彻底解决idea maven依赖报红报错问题
因为项目保密原因,有时候避免不了要进行离线开发idea 在线是神器,离线问题就来了,经常是出现maven库依赖问题,报出大量红色波浪线,如下图:研究两天,多方查询,总结解决方法如下:重点一检查是否为离线模式,maven的各项配置路径是否正确重点二各项配置正确的情况下,点击刷新,重新加载依赖如果还是报红重点三移除maven项目,再重新添加到maven右键点击Unlink Maven Projects (idea版本不同,按钮的位置不一样,图标类似一个➖).
2020-05-09 21:05:51
72657
19
原创 什么是ThreadLocal
ThreadLocal提高一个线程的局部变量,访问某个线程拥有自己局部变量。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。ThreadLocal的接口方法ThreadLocal类接口很简单,只有4个方法:void set(Object value)设置当前线程的线程局部变量的值。public Object get()该方法返回当前线程所对应的线程局部变量。p
2020-05-09 00:05:31
201
原创 如何停止线程
停止线程思路1. 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。2. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。package com.Test;public class ThreadTest1 extends Thread { boolean flag = true; @Override public void run() { System...
2020-05-08 23:16:35
284
原创 多线程Lock锁
在 jdk1.5 之后,并发包中新增了 Lock 接口(以及相关实现类)用来实现锁功能,Lock 接口提供了与 synchronized 关键字类似的同步功能,但需要在使用时手动获取锁和释放锁。Lock 锁与 synchronized 同步锁的区别lock锁:手动挡,手动上锁,手动释放锁,灵活性高synchronized同步锁:自动挡,代码开始自动上锁,代码结束自动释放锁,缺点效率低、...
2020-05-05 02:02:55
273
原创 多线程之间通讯
什么是多线程之间通讯?多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。现在假设有这么一个需求:第一个线程写入(input)用户,另一个线程取读取(out)用户.实现读一个,写一个操作。代码:package com.Thread.test;public class Res { public String name; public ...
2020-05-05 01:12:11
225
原创 多线程 Volatile 关键字
Volatile 关键字的作用是变量在多个线程之间可见,但不保证数据的原子性代码:package com.jvm.test;class ThreadVolatileDemo extends Thread { public boolean flag = true; @Override public void run() { System.out...
2020-05-04 00:55:44
180
原创 java内存模型JMM
这里有个常见的误区:java内存结构指的是内存分配的概念(JVM),堆栈方法区等;java内存模型指的是多线程可见性 (JMM),决定了一个线程与另一个线程是否可见;从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量...
2020-05-04 00:28:41
94
原创 多线程三大特性
多线程有三大特性分别是:原子性、可见性、有序性什么是原子性?即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。一个很经典的例子就是银行账户转账问题:比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。这2个操作必须要具备原子性才能保证不出现一些意外的问题。我们操作数据也是如此,比如i = i+1;...
2020-05-04 00:01:18
178
原创 多线程死锁现象
什么是多线程死锁?死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。死锁代码:package com.jvm.test;class ThreadTrain2 implements Runnable { public ...
2020-05-03 23:50:03
255
原创 线程安全问题
当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题。案例:需求现在有100张火车票,有两个窗口同时抢火车票,请使用多线程模拟抢票效果。代码:package com.jvm.test;class ThreadTrain1 implements Runnable { private int...
2020-05-03 23:18:13
262
原创 join()方法作用
join作用是让其他线程变为等待, t1.join();// 让其他线程变为等待,直到当前t1线程执行完毕,才释放。thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。例子:public class MyThread implements Runn...
2020-05-02 23:28:14
1423
glibc-devel-2.5-49.i386.rar
2020-03-18
Centos6.5 x64离线安装oracle11g教程.docx
2020-03-18
WinServer2008安装oracle11g.doc
2020-03-18
各类介质安装配置文档.rar
2020-03-18
MemoryAnalyzer 64位 虚拟机内存分析工具
2020-02-24
windows 剪贴板工具Ditto 程序员神器
2019-12-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人