`
wubo.wb
  • 浏览: 28702 次
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论
文章列表
在使用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("----等待汇总-----") ...
Global site tag (gtag.js) - Google Analytics