文章列表
ReentrantLock有以下几个特性。基本的获取锁操作,基本的释放锁操作,可轮询的锁获取操作,可中断的获取锁操作,定时获取锁操作,使用公平队列。
首先ReentrantLock的实现主要是依赖于AbstractQueuedSynchronizer。AbstractQueuedSynchronizer它维护一个状态信息单一的整数state。state在此用来表示拥有锁的线程请求获取锁的次数。state==0表示锁为可获取状态。
基本的获取锁操作:lock()方法:
public void lock() {
sync.lock(); ...
1.Executor:1).为什么会有Executor? 无限的创建线程会导致浪费很多的资源,线程频繁的挂起与唤醒都会影响性能。Executor就充当了线程池的一部分。2).常见的线程池是Executors.newFixedThreadPool .它可以生产一个定长的线程池,当线程池中的线程不够用的时候就到生产一个线程直到达到额定的线程数。这时候线程的长度就不会再改变。还有例如newCacheThreadPool可以根据当前使用情况,回收空闲线程。还有例如:ScheduledThreadPool,这个线程池可以用来代替Timer。Timer有如下两个问题:一.如果执行耗时的任务,有可能出现同一个 ...
volatile的一个有趣的实验
- 博客分类:
- JAVASE
public class Volatile {
public static void main(String[] args) {
final Volatile volObj = new Volatile();
Thread t2 = new Thread() {
public void run() {
while (true) {
volObj.check();
}
}
...
effective java 书中66条中的这段代码:
import java.util.concurrent.*;
public class StopThread {
private static boolean stopRequested;
public static void main(String[] args)
throws InterruptedException {
Thread backgroundThread = new Thread(new Runnable() {
publi ...
十一闲来无事到公司改了段代码,大家看看这个修改适合不。首先放出修改前的原始的代码(经过简化,改了名字,名字随便改的),逻辑很简单,就是前端传一个参数进来,后台根据参数的不同进行不同的逻辑处理。
public class HandleSomething {
private Manager manager;
private Logger subLogger = LoggerFactory.getLogger(this.getClass());
/**
* entryType ,进入的参数,根据该参数来判断逻辑。
*
*/
public stat ...
1.StringBuider类
StringBuider中append(String)的实现
StringBuider继承自AbstractStringBuilder ,
AbstractStringBuilder中有两个全局属性分别是:
char value[]; //存储字符的数组
int count; //数组中,已经存储字符的个数。(不是数组的长度)
来看一下append(String)的实现:
public AbstractStringBuilder append(String str) {
if (str == null) str = "null ...