自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

原创 【Java并发编程的艺术】读书笔记第九章

合理地使用线程池能够带来3个好处第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。线程池的实现原理线程池判断核心线程池里的线程是否都在执行任务...

2019-03-29 09:25:31 124

原创 【Java并发编程的艺术】读书笔记第八章

**CountDownLatch**、**CyclicBarrier**和**Semaphore**工具类提供了一种并发流程控制的手段,**Exchanger**工具类则提供了在线程间交换数据的一种手段。CountDownLatch允许一个或多个线程等待其他线程完成操作。CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达...

2019-03-29 08:57:41 129

原创 【Java并发编程的艺术】读书笔记第七章

Java从JDK 1.5开始提供了java.util.concurrent.atomic包(以下简称Atomic包),这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。在Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用和原子更新属性(字段)。·AtomicBoolean:原子更新布尔类型。·At...

2019-03-29 08:48:03 164

原创 【Java并发编程的艺术】读书笔记第六章

并发编程大师Doug Lea不遗余力地为Java开发者提供了非常多的并发容器和框架。ConcurrentHashMap的实现原理与使用在并发编程中使用HashMap可能导致程序死循环。(1)线程不安全的HashMapHashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的ne...

2019-03-28 17:26:48 170

原创 【Java并发编程的艺术】读书笔记第五章

Lock接口锁是用来控制多个线程访问共享资源的方式。一般一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。Java SE 5之后新增了Lock接口(以及相关实现类)用来实现锁功能。它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了(通过synchronized块或者方法所提供的)隐式获取...

2019-03-28 16:23:10 236

原创 【Java并发编程的艺术】读书笔记第四章

线程作为操作系统调度的最小单元。在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行。使用多线程的原因主要有以下几点:更多的处理器核心 更快的响应时间 更好的编程模型线程分配到的时间片多少也就决定了线程使用处理器资源的多少,而线程优先级就是决定线程需要多或者少分配一...

2019-03-28 11:45:35 133

原创 【Java并发编程的艺术】读书笔记第三章

Java内存模型的基础 Java内存模型中的顺序一致性 同步原语 Java内存模型的设计并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体),线程之间的通信机制有两种:共享内存和消息传递。同步是指程序中用于控制不同线程间操作发生相对顺序的机制。Java的并发采用的是共享内存模型。Java线程之间的通信由Java内存模型(本文简称为...

2019-03-27 19:58:28 176

原创 【Java并发编程的艺术】读书笔记第二章

Java中所使用的并发机制依赖于JVM的实现和CPU的指令。volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值,它不会引起线程上下文的切换和调度。Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。如果一个...

2019-03-26 20:44:56 115

原创 【Java并发编程的艺术】读书笔记第一章

第一章: 多线程执行任务存在的问题:上下文切换,死锁,受限于硬件和软件的资源限制。即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切,换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒(ms)。所以任务从保存到再加载的过程就是一次上下文切换,上下文切换也会影...

2019-03-26 17:37:20 243

转载 String s=new String("abc")创建了几个对象?

String str=new String(“abc”); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?相信大家对这道题并不陌生,答案也是众所周知的,2个。接下来我们就从这道题展开,一起回顾一下与创建String对象相关的一些JAVA知识。 我们可以把上面这行代码分成String str、=、”abc”和new String()四部分来看待。St...

2019-03-26 14:32:48 442

转载 Ajax+Spring MVC实现跨域请求(JSONP)

背景:AJAX向后台(springmvc)发送请求,报错:已阻止交叉源请求:同源策略不允许读取 http://127.0.0.1:8080/DevInfoWeb/getJsonp 上的远程资源。可以将资源移动到相同的域名上或者启用 CORS 来解决这个问题。百度一下,发现是遇到了跨域请求请求问题。搜集资料如下JSONP解释在解释JSONP之前,我们需要了解下”同源策略“这个概念,这对理解...

2019-03-26 13:53:35 145

原创 IntelliJ Idea 常用快捷键列表

 Alt+回车 导入包,自动修正Ctrl+N   查找类Ctrl+Shift+N 查找文件Ctrl+Alt+L  格式化代码Ctrl+Alt+O 优化导入的类和包Alt+Insert 生成代码(如get,set方法,构造函数等)Ctrl+E或者Alt+Shift+C  最近更改的代码Ctrl+R 替换文本Ctrl+F ...

2019-03-26 11:07:44 95

原创 深入解析ThreadLocal底层实现原理

学习Java中常用的开源框架,Mybatis、Hibernate中设计到线程通过数据库连接对象Connection,对其数据进行操作,都会使用ThreadLocal类来保证Java多线程程序访问和数据库数据的一致性问题。就想深入了解一下ThreadLocal类是怎样确保线程安全的!详解如下:一、对其Threa...

2019-03-26 11:03:21 178

转载 Java的JAR包, EAR包 ,WAR包内部结构

JAR包JAR 文件格式以流行的 ZIP 文件格式为基础;与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用;JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文...

2019-03-25 09:51:20 486

转载 Tomcat ClassLoader工作原理

ContextClassLoader工作原理每个运行中的线程都有一个成员contextClassLoader,用来在运行时动态地载入其它类系统默认的contextClassLoader是systemClassLoader,所以一般而言java程序在执行时可以使用JVM自带的类、$JAVA_HOME/jre/lib/ext/中的类和$CL...

2019-03-25 09:50:36 280

转载 Tomcat Connector组件

Tomcat Connector组件Tomcat Connector是Tomcat中的一个重要的组件,它负责监听到达Tomcat的请求,并将这些 请求转换成Servlet规范中所定义的Request,然后将转换后的请求交给Engine组件去处理,最后将Engine返回的Response返回给客户端。1.Connector组件的主要请求处...

2019-03-25 09:50:09 151 1

转载 Tomcat Engine组件

Tomcat Engine组件Tomcat Engine组件是一个职责相当简单的组件,他的主要作用就是决定从Connecter过来的请求应该交给哪一个Host来处理。在本文中,我们将会简单介绍下Tomcat的Engine组件的功能,backgroundProcess()方法,以及和Engine组件相关的几个Valve。一、Engi...

2019-03-25 09:49:42 358

转载 Tomcat Host组件

Tomcat Host组件Tomcat Host组件在Tomcat中代表一个“Virtual Host”,使Tomcat可以在单个Tomcat实例中支持多个“Virtual Host”,这样,我们也就可以知道一个Engine可以包含多个Host组件。Host组件包含两个主要的Valve,一个Valve决定请求由哪一个Context处理...

2019-03-25 09:49:10 378

转载 Tomcat Wrapper组件

Tomcat Wrapper组件一些基本概念1、ServletContext:作用:表示一个web应用的上下文;可以想象成一个Web应用程序的共享数据区域,该区域保存该Web应用程序的共享数据;生命周期:每个Web应用程序都对应一个ServletContext,保存在Context中,在Context初始化时创建,Context...

2019-03-25 09:48:39 228

转载 Java序列化的机制和原理

序列化是什么:序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。把Java对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为Java对象的过程称为对象的...

2019-03-25 09:47:57 197

转载 Java多线程之线程池深入分析(下)

一、数据结构与线程构造方法由于已经看到了ThreadPoolExecutor的源码,因此很容易就看到了ThreadPoolExecutor线程池的数据结构。图1描述了这种数据结构。图1 ThreadPoolExecutor 数据结构其实,即使没有上述图形描述ThreadPoolExecutor的数据结构,我们根据线程池的要...

2019-03-25 09:46:51 133 1

转载 Java多线程之线程池深入分析(上)

线程池是并发包里面很重要的一部分,在实际情况中也是使用很多的一个重要组件。下图描述的是线程池API的一部分。广义上的完整线程池可能还包括Thread/Runnable、Timer/TimerTask等部分。这里只介绍主要的和高级的API以及架构和原理。大多数并发应用程序是围绕执行任务(Task)进行管理的。所谓任务就是抽象、离散...

2019-03-25 09:46:08 130

转载 深入理解ConcurrentHashMap原理分析以及线程安全性问题

ConcurrentHashMap与HashTable区别?HashTableput()源代码从代码可以看出来在所有put 的操作的时候 都需要用 synchronized 关键字进行同步。并且key 不能为空。这样相当于每次进行put 的时候都会进行同步 当10个线程同步进行操作的时候,就会发现当第一个线程进去 其他线程必须等待第一个线程执行完成,才可以进行下去。性能特别差。Cu...

2019-03-25 09:45:37 1116

原创 HashMap的工作原理详解-面试最佳答案

HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程...

2019-03-23 10:33:01 171

转载 阿里大神总结的分布式系统稳定性模式

小邪讲的培训的内容,对集群大访问量的应用很有针对性的一些注意点。1.隔离。 发生问题,能控制在一个小的范围。 物理隔离/虚拟(容器,实例,VM)隔离/流控2.内存溢出。 代码细节,数据量,进程数控制。3.预估数量,阀值控制。 远程获取的变量需谨慎处理4.超时 QPS = 1000ms / rt(timeOutAvg) * threa...

2019-03-23 10:24:59 395

转载 LVS集群中的IP负载均衡技术详解

1. 前言本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR)的工作原理,以及它们的优缺点。2. 基于IP层负载均衡调度的解决方法用户通过虚拟IP地址(Virtual IPAddress)访问服务时,访问请求的报文会到达负载调度器,由它进行负...

2019-03-23 10:21:37 252

转载 Linux负载均衡LVS原理技术详细讲解

一. LVS主从工作原理LVS在基本的生产环境中,都会同时运行在二台硬件相近的服务器上:LVS Router(主 LVS ),一个作为备份LVS(备份 LVS )。主 LVS 服务器在网站的前端起二个作用:(1. 均衡负载压力到真实服务器(如apache)上.(2. 检查后面真实服务器提供的服务是否正常.备份LVS 用来监控主LV...

2019-03-23 10:19:22 161

转载 三大WEB服务器对比分析Apache、Lighttpd、Nginx

一、软件介绍(apache  lighttpd  nginx)1、lighttpd  Lighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI,CGI,Auth,输出压缩(out...

2019-03-23 09:39:11 204

转载 负载均衡(LVS/HAProxy/Nginx)简介和对比

        在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:一种是通过硬件来进行进行,常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于...

2019-03-23 09:30:13 256

转载 HTTP 状态码

在网站建设的实际应用中,容易出现很多小小的失误,就像MySQL当初优化不到位,影响整体网站的浏览效果一样,其实,网站的常规HTTP状态码的表现也是一样,Google无法验证网站几种解决办法,提及到由于404状态页面设置不正常,导致了Google管理员工具无法验证的情况,当然,影响的不仅仅是这一方面,影响的更是网站的整体浏览效果。因此,比较清...

2019-03-23 09:15:57 245

转载 浏览器缓存相关的HTTP头介绍:Expires,Cache-Control,Last-Modified,ETag

缓存对于Web开发有重要作用,尤其是大负荷Web系统开发中。缓存分很多种:服务器缓存,第三方缓存,浏览器缓存等。其中浏览器缓存是代价最小的,因为浏览器缓存依赖的是客户 端,而几乎不耗费服务器端的资源。让浏览器做缓存需要给浏览器发送指定的Http头,告诉浏览器缓存多长时间,或者坚决不要缓存。1.Expires(过期时间)HTTP头信息...

2019-03-23 09:12:50 650

转载 大话设计模式之设计模式遵循的七大原则

最近几年来,人们踊跃的提倡和使用设计模式,其根本原因就是为了实现代码的复用性,增加代码的可维护性。设计模式的实现遵循了一些原则,从而达到代码的复用性及增加可维护性的目的,设计模式对理解面向对象的三大特征有很好的启发,不看设计模式,很难深层地体会到面向对象开发带来的好处 。在刚开始学习中,很难做到将这些模式融汇贯通,所以这个需要我们在编码前多...

2019-03-23 09:07:53 144

转载 Java开源数据库连接池比较(c3p0,dbcp,druid)

DBCP DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序用使用可以设置最大和最小连接,连接等待时间等,基本功能都有,此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性有所下降,此外不提供连接池监控C3P0 C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现j...

2019-03-23 09:07:30 475 1

原创 为什么要重载equal和hashCode方法

equals()是用来判断两个对象或变量具体的值是否相等。基础类型判断是否相等时,使用“==”来判断,按java的说话,“==”当用来判断是基础类型是判断内容的,而引用对象是判断内存地址的。hashCode()是用来产生哈希玛的,该方法返回该对象的哈希码值,而哈希玛是用来在散列存储结构中确定对象的存储地址的...

2019-03-22 10:01:25 543

原创 Nginx与apache比较

       为什么Nginx的性能要比Apache高得多?这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid、Memcac...

2019-03-22 09:37:42 328

转载 深入理解Servlet线程安全问题

        前言                在上一篇关于Serlvet框架和Servlet生命周期的学习中,我们...

2019-03-22 09:22:14 186

转载 分布式存储系统设计的若干原则

1、CAP理论2000年Eric Brewer教授提出了著名的CAP理论,即:一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。2002年MIT的Seth Gilbert 和 Nancy lynch两人证明了CAP理论的正确性。根据CAP理论,一致性(C),可用性(A),分区容错性(P),三者不可兼得,必须...

2019-03-22 09:15:54 285

转载 spring 五个事务隔离级别和七个事务传播行为

Spring在TransactionDefinition接口中定义了五个不同的事务隔离级别ISOLATION_DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应 ISOLATION_READ_UNCOMMITTE...

2019-03-22 09:07:35 101

原创 synchronized 和Lock 的异同

主要相同点: Lock能完成synchronized所实现的所有功能主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放...

2019-03-22 09:04:53 139

原创 Collection 和 Collections的区别

Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。...

2019-03-22 09:03:03 99

空空如也

空空如也

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

TA关注的人

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