原子操作的实现原理

原子(atomic)指的是“不能被进一步分割的最小粒子”,原子操作指的是“不可被中断的一个或一系列操作”。在多处理器上实现原子操作就会变得很复杂。 处理器如何实现原子操作32位IA32处理器使用的是基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。首先处理器会自动保证基本的内存操作的原子性。处理器保证从系统内存中读取或者写入一个字节是原子的,意思是当一个处理器读取一个原子时,其...

发布于 Java

Autowired, Resource和Inject区别

1. 概述@Resource、@Inject和@Autowired是在Java开发中都会经常用到的注解,这些注解为类提供了一种声明性的方式来解决依赖关系 12@Autowired AnotherClass object; 与之对应的命令式实例化: 1AnotherClass object = new AnotherClass(); 其中两个来自java扩展包:javax.annota...

发布于 Java

Java中常用的锁

synchronized最常见的锁,可以非常快速的实现多线程的同步操作,只需要在需要同步的方法、对象、或代码块中加入该关键字,就能保住同一时刻最多只有一个线程执行 使用synchronized修饰的代码具有原子性和可见性,在需要进程同步的程序中使用的频率非常高,可以满足一般的进程同步要求 Java实现的锁机制有很多种,并且有些锁机制性能也比synchronized高,但还是强烈推荐在多...

发布于 Java

Java中的Unsafe类

众所周知,Java成为现在广泛使用的后端语言之一就是因为其拥有自动垃圾回收机制,由于垃圾回收的消耗,也导致Java运行效率不如没有垃圾回收机制的C++等,本文介绍Java中“不安全”的部分—手动申请和释放内存

发布于 Java

Java垃圾收集器

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。

发布于 Java

用户线程和守护线程

java线程分类在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 用户线程和守护线程的区别 二者其实基本上是一样的。唯一的区别在于JVM何时离开。 用户线程:当存在任何一个用户线程未离开,JVM是不会离开的。 守护线程:如果只剩下守护线程未离开,JVM是可以离开的。 在Java中,制作守护线程非常简单,直接利用setDaemo...

发布于 Java

Mybatis的动态SQL

动态 SQL动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。 使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著...

发布于 Java

从零编写持久层框架

设计思路使用者 引入自定义的框架jar 编写配置文件 dbconfig.xml:数据库配置信息,存放mapper.xml位置 mapper.xml:sql配置信息 框架 加载配置文件:以字节流存储在内存中 创建Resources类:InputStrean getResourceAsStream(String path) 创建两个Bean:容器对象,存放配置文件解析结果 Conf...

发布于 Java

实现自己的IOC容器

手动实现简单的IOC容器

发布于 Java

分布式技术-Zookeeper概述

ZooKeeper是一个分布式的,开放源码的分布式应用程序分布式应用程序/9854429)协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

发布于 Java