java并发编程之5——AQS-AbstractQueuedSynchronizer-源码分析

AbstractQueudSynchronizer(AQS)是道格李java并发编程的基础,内部主要包括Node和ConditionObject两个内部类,基于Node节点构建了一个FIFO队列,用来存储等待锁的线程的队列。基于ConditionObject节点也构造了一个FIFO队列,用于存储因为某种原因已经获取到锁而又主动释放锁的线程的队列。

阅读全文

java并发编程之4——Java锁分解锁分段技术

并发编程的所有问题,最后都转换成了,“有状态bean”的状态的同步与互斥修改问题。而最后提出的解决“有状态bean”的同步与互斥修改问题的方案是为所有修改这个状态的方法都加上锁,这样也就可以保证他们在修改bean的状态的时候是顺序进行的。但是这样整个过程的瓶颈也就是被加锁的这段代码。由此就产生了很多对程序加锁的优化思想,从整体上来看,可以分为两个部分:对单个锁的算法的优化。和对锁粒度的细分。

阅读全文

字符编码历史(字符编码详解)

简单来说字符集就是一套文字符号及其编码的描述。从20世纪60年代美国标准化组织ANSI发布了第一个计算机字符集ASCII开始,为了处理不同的文字,各大计算机公司,各国政府,以及各种标准化组织发明了几百种字符集,例如我们所熟悉的:ASCII,USC,GBK,BIG5... 这些不同的字符集从收录到编码都各不相同,给软件的移植和信息的交换带来了很大的困惑。最严重的问题就是字符乱码,这也是到现在为止还影响着每个开发人员的根本问题。本文将从字符编码的发展历史为主线,分析字符乱码的缘由,以及精彩的字符编码斗争史。

阅读全文

java并发编程之3——Java锁的分析

在java虚拟机上面每个对象和类在逻辑上面都是和一个监视器相关联的,对于对象来说,监视器保护的是对象的实例变量,对于类来说,监视器保护的是类的类变量,为了实现监视器的排他能力,JVM为每个对象分配一个锁(称为内置锁),任何时候只有一个线程可以获得这个锁,当前线程访问实例对象不需要重新获取锁(锁的重入,在后面会介绍), 当只有一个线程获取到该对象的锁之后,在他释放这个锁之前其他线程只能等待。

阅读全文

Java并发编程之2——同步工具类的使用(CountDownLatch,CyclicBarrier,BlockungQueue,Semaphore)

为了简化线程同步与互斥的相关操作JDK,提供了大约4中同步与互斥的工具类: 闭锁(CountDownLatch),栅栏(CyclicBarrier),阻塞队列(BlockingQueue),信号量(semaphore)。本文将对比分析四种同步工具类的使用范例,和应用场景。

阅读全文

java并发编程之1——synchronized和volatile

总的来说synchronized主要是解决线程互斥性问题,volatitle主要是解决线程可见性的问题。synchronized主要用来保证临界的代码在同一时刻只有一个线程在访问获取修改。那么synchronized保护的变量一定是线程安全的。volatile能够保证在valatile变量之前的代码在valatile修饰的代码之前执行,由volatile修饰的代码之后的代码在voliate修饰的代码之后运行。

阅读全文

MySQL常见问题总结分析

在我们日常的开发过程中,经常会遇到一些规则法则或者约定,在不知道原因的情况下,很多时候会抱怨DBA,为什么会有那么多的强制约定,明明我的业务这个字段需要为null,你却就是不让我为null,如果你不了解这里面的深层次原因,你肯定PK不过DBA,最后只能乖乖地修改自己的逻辑。下面这里常见的问题,是我在公司开发过程中收集总结的。里面有对问题原因的分析,希望能给大家提供帮助,解决困惑。

阅读全文

使用try-with-resource改进代码异常处理机制

JDK1.7中引入了try-with-resource机制,试图简化异常处理以及资源关闭等问题。由try-with-resource语句托管的资源文件,在离开try-with-resource语句块的时候,会依次进行关闭。而不再需要像以前那样需要逐个的try-catch并关闭资源。

阅读全文

Hexo-GitHub-Page-搭建个人博客全过程详解

本站博客是基于Hexo和Maupassant搭建的,代码服务托管在GitHub Pages上。所有的代码均来自网络。感谢那些乐于奉献的大神将自己开发的工具分享到网络并让我们能够自由使用和传播。才使得我能在如此之小的时间成本和金钱成本之内完成自己的博客搭建。在之前我也层用Java编写过自己的博客,最后考虑到各种成本,还是切换到本文所提的方法。在我的第一篇博客中提到过,当我觉得我的博客已经开发完成之后,就公开我的博客的搭建方法,并开放源代码。今天终于付诸实现了。分享真是给人带来快乐的一件事情...

阅读全文

mac homeBrew 管理软件

在使用Ubuntu的时候经常使用sudo apt-get命令来进行软件的安装、更新、删除等操作。那么在mac系统有没有一种类似的解决方案呢?在mac上面有一款类似的包管理工具他的名字叫:HomeBrew。

阅读全文

mac 常用软件推荐

1 intellij idea
      简介:Java编程的利器,用完idea之后绝对不会再想用eclipse,但是从eclipse转入idea的过程比较艰难,目前有社区版和企业版本,一般来说社区版本就足够日常的学习和开发了,企业版本加入了spring等企业开发框架的支持,但是价格比较贵。
      官方下载地址:https://www.jetbrains.com/idea/download/

阅读全文

mac/ubuntu/linux 配置sudo免密码

Mac/Ubuntu/Linux 配置sudo免密码只需要如下两部:
1 打开命令窗口输入如下命令:

1
sudo visudo 或者 sudo vi /etc/sudoers

阅读全文

修改mac下文件的默认打开软件

在我们打开mac文件的时候,系统会提供一个默认的软件来打开这个文件。但是在很多时候mac系统对文件提供的默认打开软件并不是我们想要的。例如:我有一个index.jade文件,双击该文件的时候我想用sublime打开但是打开的软件确实Xcode,导致我每次都要选择jade文件,右击在open with中选择自己想要的软件。这样确实太麻烦。本文将提供三种种方案来解决这个问题 ...

阅读全文

java和Spring发送邮件

在我们的项目中,很多时候需要用到发送邮件的地方。网上也有一些发送邮件的教程。但是由于有的作者试图使发送邮件的系统比较完善。所以写的比较“曲折”,以至于让读者看到之后不知所云。本文将提炼出发送邮件的骨架。如果读者按照本文的内容开发自己的邮件系统,只需要简单的六步即可。

阅读全文

MySQL索引优化分析,SQL优化,慢查询分析

本文基于Mysql5.6主要介绍了MySQL的索引分析工具--explain和profiling。并利用MySQL的索引分析工具,对MySQL的索引进行分析,通过观察MySQL索引分析的过程,可以看到常见的索引优化点,以及在使用索引的时候的常见问题。本文的最后部分介绍了MySQL的无效索引(什么时候你为这个字段添加了索引,但是却无法使用)....

阅读全文