- 浏览: 28630 次
- 来自: 成都
最新评论
文章列表
在使用maven,eclipse,junit的项目中,打包后再进行单元测试常常会报找不到类
Class not found com.xxx.service.XxxServiceTest
java.lang.ClassNotFoundException: com.xxx.service.XxxServiceTest
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassL ...
LinkedBlockingQueue是一个线程安全的阻塞队列,它实现了BlockingQueue接口,BlockingQueue接口继承自java.util.Queue接口,并在这个接口的基础上增加了take和put方法,这两个方法正是队列操作的阻塞版本。
LinkedBlockingQueue
首先看看LinkedBlockingQueue的类图
从图中可以看出LinkedBlockingQueue中引入了两把锁takeLock和putLock,显然分别是用于take操作和put操作的。既LinkedBlockingQueue入队和出队用的是不同的锁,那么LinkedBloc ...
在AQS队列中通过nextWaiter指针串起来的就是条件队列,实际上是通过ConditionObject来实现的。ConditionObject类实现了Condition接口。Condition 实现可以提供不同于 Object 监视器方法的行为和语义。比如一个对象里面可以有多个Condition,可以注册在不同的condition,可以有选择性的调度线程,很灵活。而Synchronized只有一个condition(就是对象本身),所有的线程都注册在这个conditon身上,线程调度不灵活。
Condition 将 Object 监视器方法(wait、notify 和 notifyAll) ...
AbstractQueuedSynchronizer是JAVA并发包的核心组件,AbstractQueuedSynchronizer中封装了对锁的操作。锁主要有两种操作:获取和释放。获取锁首先判断当前状态是否允许获取锁,如果是就获取锁,否则就阻塞操作或者获取失败;释放锁就是修改状态位,如果有线程因为状态位阻塞的话就唤醒队列中的一个或者更多线程。要支持这两个操作,需要有一个有序的队列,JAVA中,有序队列是由一个个node组成的,刚看了Node的源码,作个笔记。
这个有序队列是一种CLH(Craig, Landin, and Hagersten)队列,整个是一个包含头结点的双向链表,每个结点其 ...
log4j日志级别共有7种:分别是ALL,DEBUG,INFO,WARN,ERROR,FATAL,OFF。看Priority类中的定义
public final static int OFF_INT = Integer.MAX_VALUE;
public final static int FATAL_INT = 50000;
public final static int ERROR_INT = 40000;
public final static int WARN_INT = 30000;
public final static int INFO_INT = 20000;
p ...
最近学了一下log4j,作个标记:
log4j的配置文件有两种格式:xml和properties,分别由类DOMConfigurator和PropertyConfigurator进行处理,在此假设log4j配置文件是xml格式的,看看DOMConfigurator的configure方法
static public void configure(String filename) throws FactoryConfigurationError {
new DOMConfigurator().doConfigure(filename,LogManager.getLoggerRepos ...
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class Phonebooth {
public static final int N = 5;
public static void main(String[] args) {
Semaphore semaphore = new Semaphore(N);
ExecutorService servi ...
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CyclicBarrierTest {
public static final int N = 5;
public static void main(String[] args) {
System.out.println("----等待汇总-----") ...