`
文章列表
  在java并发包的一个子包中,提供了针对于基础类型的原子类型,熟悉并发的会知道,i++并不是一个原子操作,long longValue = 100l;也不是一个原子操作; 那么java.util.concurrent.atomic包中是如何实现对基础类型数据的原子操作的呢?   以AtomicLong类为例:   private volatile long value;  AtomicLong类有个成员变量value,声明为volatile的;也就是各个线程的共享变量,    以getAndAdd方法来说明增加值是如何实现原子操作的: public final lo ...
  在写一个简单的Buffer的小例子的时候,抛出一个异常: Exception in thread "main" java.nio.BufferUnderflowException at java.nio.Buffer.nextGetIndex(Buffer.java:498) at java.nio.HeapByteBuffer.getChar(HeapByteBuffer.java:253) at com.malone.nio.BufferDemo.main(BufferDemo.java:22)  例子的代码为: public class Buf ...
   最近在用spring security控制系统的权限, 在用户登陆的时候,在方法loadUserByUsername里验证用户名是否正确时,想获取HttpSession,并把登陆用户保存到session中,此时发现在当前方法中无法获取HttpSession;类似的, 在系统中,在无法获取HttpSession的时候,想使用session中保存的数据是很困难的;在我们项目中,我们是这样解决的:  基本思路:创建一个Filter,在请求前把HttpSession绑定到当前线程中,在使用时,从当前线程获取HttpSession   1 保存HttpSession的上下文:   pu ...
  最近一直在优化系统性能,优化代码,加缓存等一系列措施,可是不知道究竟提高了多少,系统性能瓶颈在哪里,所以从网上找了几个常用的java web性能监控工具,这几个工具都是开源的,各有各的优缺点,根据自己的需要来使用 1 javamelody (此部分转载自:http://zhumeng8337797.blog.163.com/blog/static/10076891420123270148914/)   JavaMelody 能够在QA和实际运行生产环境监测Java或Java EE应用程序服务器。并以图表的形式显示:Java内存和Java CPU使用情况,用户Session数量,J ...
   Semaphore即信号量,可以被多个线程获取,下面是一个具体的例子,和Lock配合使用,模拟有三台打印机,一次允许三个线程使用空闲的打印机,代码如下: package thread; import java.util.concurrent.Semaphore; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * Created with IntelliJ IDEA. * User: malone * Date: 14-4 ...
    做web开发的时候,一般都是在Controller统一捕捉异常,在业务逻辑里抛出自定义的异常;如果代码中使用了多线程,线程中出错,或者你在线程中抛出一个异常,在最外层Controller里是无法捕捉到线程中的异常的, Thread类中定义了一个内部接口UncaughtExceptionHandler,此接口用来统一处理线程出错后的处理,自己可定义一个类,来处理对应的错误 class MyHandler implements Thread.UncaughtExceptionHandler { @Override public void uncaughtExcept ...
  ArrayBlockingQueue为BlockingQueue的实现类,常用的阻塞队列,先来看一下次类的成员变量:   /** 存放数据的数组*/ final Object[] items; /**队列出口数据在数组中的下标*/ int takeIndex; /**队列入口在数组中的下标*/ int putIndex; /**存放数据数组的实际长度(被存放了数据的长度)*/ int count; /**并发用到的locak*/ final ReentrantLock ...
BlockingQueue是一个线程安全的队列,本身的部分方法实现了线程之间的调度,实现生产者消费者非常方便,比synchronized,wait更容易控制,不过看BlockingQueue的实现类ArrayBlockingQueue的源码,主要还是使用Lock和条件变量Condition来实现,足以见的Lock的灵活和强大,下面是我写的实现: import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; /** * Created by Administrat ...
本文转载自:http://www.2cto.com/kf/201212/175028.html 一、概述: BlockingQueue作为线程容器,可以为线程同步提供有力的保障。 二、BlockingQueue定义的常用方法 1.BlockingQueue定义的常用方法如下:   抛出异常 特殊值 阻塞 超时 插入 ad ...
使用simpleDateFormat的时候,有时会报错: java.lang.NumberFormatException: multiple points  报此错是因为SimpleDateFormat是线程非安全的,如果在每个方法中使用到SimpleDateFormat对象的时候,就会短暂的创建SimpleDateFormat对象,方法执行完后被回收,这样做内存开销比较大;在类中定义一个static的SimpleDateFormat变量,线程不安全,报上面的错误;现在有一个折中的方法, 使用ThreadLocal,为每一个线程创建一个SimpleDateFormat对象,这样既可以避免 ...
1 写锁排斥对象上所有方法的读写锁   2 读锁排斥对象上所有方法写锁,不排斥读锁   3 log4j是线程安全的
    网上有很多生产者消费者模型,很多都是基于synchronized, wait, notify的,也有基于Lock的,下面是我用Lock, Condition实现的.   1 仓库:   class GodOwn { //声明锁对象 private Lock lock = new ReentrantLock(); //当仓库中的物品数量不够消费的条件 Condition lessCondition = lock.newCondition(); //当仓库中的物品数量超过仓库的总量的条件 Condition mor ...
  1 下载jdk 1.7 linux版本 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html   2. 将下载的文件解压缩到/usr/local/development/jdk1.7.0_04目录。   3. 创建文件/etc/profile.d/development.sh,将下面的内容复制到该文件。
  本文转载自:http://www.ibm.com/developerworks/cn/java/j-jtp06197.html   Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实 ...
      对于spring cache的配置和使用网上说了很多了,不再重复了,现在描述一下所使用的jar包       一 使用spring本身的cache           <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.4.RELEASE</versio ...
Global site tag (gtag.js) - Google Analytics