摘要:synchronized 早期的实现比较低效,对比 ReentrantLock,大多数场景性能都相差较大,但是在 Java 6 中对 synchronized 进行了非常多的改进。 主要区别如下: ReentrantLock 使用起来比较灵活,但是必须有释放锁的配合动作; ReentrantLock
阅读全文
摘要:可变性 简单的来说:String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在
阅读全文
摘要:Safepoint 可以理解成是在代码执行过程中的一些特殊位置,当线程执行到这些位置的时候,线程可以暂停。在 SafePoint 保存了其他位置没有的一些当前线程的运行信息, 供其他线程读取。这些信息包括:线程上下文的任何信息,例如对象或者非对象的内部指针等等。我们一般这么理解 SafePoint,
阅读全文
摘要:STW java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。 Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这些现象多半是由于gc引起。 设置jvm
阅读全文
摘要:概念 Semaphore是java并发包里面的一个工具类,我们限制可以访问某些资源的线程数目就可以使用Semaphore了 Semaphore:可理解为允许线程执行信号的池子,池子中放入多少个信号就允许多少线程同时执行。 Semaphore的作用:限制线程并发的数量 注意:的是 Semaphore
阅读全文
摘要:背景 Java从JDK1.5开始提供了java.util.concurrent.atomic包,这个包中的原子操作类提供了一种用法简单,性能高效,线程安全地更新一个变量的方式。在Java并发比编程中,要想保证一些操作不被其他线程干扰,就需要保证原子性 1、原子更新基本类型类: AtomicBoole
阅读全文
摘要:一.什么是阻塞队列? 阻塞队列是一个在队列基础上又支持了两个附加操作的队列。这两个附加的操作支持 阻塞和插入和移除方法。 支持阻塞的插入方法:队列满时,队列会阻塞插入元素的线程,直到队列不满。 支持阻塞的移除方法:队列空时,获取元素的线程会等待队列变为非空。 二.阻塞队列的应用场景 阻塞队列常用于生
阅读全文
摘要:JVM内存布局 方法区 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 这区域的内存回收目标主要是针对常量池的回收和对类型的卸载 和堆一样不需要连续的内存,并且可以动态扩展,动态扩展失败一样会抛出 OutOfMemoryError 异常。 本地方法栈 而本地方法栈
阅读全文
摘要:1:多余的 if/else,对于boolean值,避免不必要的等式判断。 反例: boolean ret; int i=0; if(i==0) { ret=true; } else { ret=false; } 类似上面这种写法if/else 可以简写: int i=0; boolean ret=(
阅读全文
摘要:Java中创建线程主要有三种方式: 一、继承Thread类创建线程类(Thread 是类,且实现了Runnable接口) (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。 (2)创建Thread子类的实例,即创建了
阅读全文
摘要:http://edu.51cto.com/index.php?do=lession&id=36974
阅读全文