自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张维鹏的博客

芝兰生于幽谷,不以无人而不芳!

  • 博客(11)
  • 资源 (2)
  • 收藏
  • 关注

原创 JUC多线程:系统调用、进程、线程的上下文切换

1、上下文切换就是一个线程释放处理器的使用权,另外一个线程获取处理器的使用权的过程;在切入切出时,系统会保存和读取当前线程的上下文信息,用户恢复线程的执行进度;自发和非自发的调用操作,都会导致上下文切换,会导致系统资源开销。2、在 JDK 的 java.lang.Thread.State 源码中定义了6个状态,在某一时刻,一个线程只能处于一种状态:New、Runnable、Blocked、Waiting、Timed Waiting、Terminated

2021-10-24 08:00:00 8177 1

原创 服务容错设计:流量控制、服务熔断、服务降级

单体应用的故障影响面很大,而分布式系统中由于故障的影响面可以被隔离,所以影响面较小,但是因为服务多,出故障的频率也很多。不过我们需要明白:出现故障不可怕,故障影响面过大才可怕;出现故障不可怕,故障恢复时间过长才可怕。所谓 “防火胜于救火”,所以我们更要考虑如何进行防火,这就要求我们在设计或者运维时都要为可能发生的故障考虑,即所谓 “Design for Failure”,面向失败设计,在设计时要考虑如何减轻故障。而容错设计就是面向失败设计一个非常重要的环节,常见的容错设计有:流量控制、服务熔断、服务降级

2021-10-18 08:00:00 10488 5

原创 一致性哈希算法原理详解

(1)一致性哈希算法将整个哈希值空间按照顺时针方向组织成一个虚拟的圆环,称为 Hash 环;(2)接着将各个服务器使用 Hash 函数进行哈希,具体可以选择服务器的IP或主机名作为关键字进行哈希,从而确定每台机器在哈希环上的位置;(3)最后使用算法定位数据访问到相应服务器:将数据key使用相同的函数Hash计算出哈希值,并确定此数据在环上的位置,从此位置沿环顺时针寻找,第一台遇到的服务器就是其应该定位到的服务器

2021-10-17 18:46:56 49954 32

原创 Tomcat 的类加载机制

Tomcat 实际上只有WebAppClassLoader 加载器中打破了双亲委派,其他类加载器还是遵循双亲委派的。 这样做最主要原因是保证同个 Web 容器中的不同 Web 应用程序所使用的类库相互独立,避免相互影响

2021-10-16 19:43:33 7730 4

原创 什么是僵尸进程与孤儿进程

当一个进程调用 exit 命令结束自己的生命时,其实它并没有真正的被销毁,内核只是释放了该进程的所有资源,包括打开的文件、占用的内存等,但是留下一个称为僵尸进程的数据结构,这个结构保留了一定的信息(包括进程号 the process ID,退出状态,运行时间),这些信息直到父进程通过 wait()/waitpid() 来取时才释放

2021-10-12 08:00:00 27321 1

原创 JUC多线程:Atomic原子类与CAS原理

tomic 原子操作类是基于无锁 CAS + volatile 实现的,并且类中的所有方法都使用 final 修饰,进一步保证线程安全。而 CAS 算法的具体实现方式在于 Unsafe 类中,Unsafe 类的所有方法都是 native 修饰的,也就是说所有方法都是直接调用操作系统底层资源进行执行相应任务。Atomic 使用乐观策略,每次操作时都假设没有冲突发生,并采用 volatile 配合 CAS 去修改内存中的变量,如果失败则重试,直到成功为止。

2021-10-11 09:45:00 9074

原创 JUC多线程:阻塞队列ArrayBlockingQueue与LinkedBlockingQueue

阻塞队列最大的特性在于支持阻塞添加和阻塞删除方法:(1)阻塞添加:当阻塞队列已满时,队列会阻塞加入元素的线程,直到队列元素不满时才重新唤醒线程执行加入元素操作。(2)阻塞删除:但阻塞队列元素为空时,删除队列元素的线程将被阻塞,直到队列不为空再执行删除操作

2021-10-11 09:45:00 9545

原创 JUC多线程:ThreadLocal 原理总结

ThreadLocal 提供了线程内部的局部变量,当在多线程环境中使用 ThreadLocal 维护变量时,会为每个线程生成该变量的副本,每个线程只操作自己线程中的变量副本,不同线程间的数据相互隔离、互不影响,从而保证了线程的安全。ThreadLocal 内存泄露的根本原因在于 ThreadLocalMap 的生命周期与当前线程 CurrentThread 的生命周期相同,且 ThreadLocal 使用完没有进行手动删除导致的

2021-10-11 09:30:00 10744 1

原创 JUC多线程:CountDownLatch、CyclicBarrier、Semaphore同步器原理总结

1、CountDownLatch,闭锁,主要作用是使一个或一组线程在其他线程执行完毕之前,一直处于等待状态,直到其他线程执行完成后再继续执行。2、CyclicBarrier,循环栅栏,通过 CyclicBarrier 可以实现一组线程之间的相互等待,当所有线程都到达屏障点之后再执行后续的操作。3、Semaphore 信号量,主要用于控制并发访问共享资源的线程数量,依赖 AQS 的变量 state 作为许可证 permit,通过控制许可证的数量,来保证线程之间的配合。

2021-10-11 09:15:00 10956

原创 JUC多线程:AQS抽象队列同步器原理

AQS,Abstract Queued Synchronizer,抽象队列同步器,是 J.U.C 中实现锁及同步组件的基础。工作原理就是如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就将获取不到锁的线程加入到等待队列中。这时,就需要一套线程阻塞等待以及被唤醒时的锁分配机制,而 AQS 是通过 CLH 队列实现锁分配的机制。

2021-10-11 09:00:00 9193

原创 JUC多线程:JMM内存模型与volatile内存语义

JMM 是 Java 虚拟机定义的一种多线程访问 Java 内存各个变量的访问规范,主要围绕如何解决并发过程中的原子性、可见性、有序性这三个问题来解决线程的安全问题。Java 内存模型将内存分为了主内存和工作内存。主内存存放所有的共享变量,所有线程都可以访问。每个线程都有自己的工作内存,存储了该线程使用到的变量的副本,线程对变量的所有操作都必须在自己的工作内存中完成,不能直接操作主存中的变量。操作时,首先将变量从主内存拷贝到自己的工作内存中,然后在自己的工作内存中对变量进行操作,操作完成后再将变量写回主存

2021-10-09 11:47:01 4229 12

Spring+Struts + Hibernate整合jar包

spirng4.3.9+struts2.3.24+hibernate5.0.9整合jar包依赖完整版。

2018-07-13

Spring+SpringMVC+Mybaits整合jar包

spring4.3.9+springmvc4.3.9+mybatis3.4.4的整合jar包依赖完整版。

2018-07-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除