- 浏览: 499425 次
- 性别:
- 来自: 上海
最新评论
-
abc08010051:
张延龙地盘 写道多实例下就不行了吧是的,多实例直接上分布式锁
java高并发下的唯一性验证 -
张延龙地盘:
多实例下就不行了吧
java高并发下的唯一性验证 -
a12345531:
s3.getResourceUrl(bucketName, k ...
Amazon AWS S3 上传文件 并获取公用url -
544483342:
楼主请问WorkerEventHandler和EventHan ...
disruptor(一) 单一生产者和WorkPool消费者源码阅读 -
544483342:
请问楼主使用的是什么UML工具啊?
disruptor(一) 单一生产者和WorkPool消费者源码阅读
文章列表
在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 ...
BlockingQueue深入分析(转载)
- 博客分类:
- 多线程
本文转载自: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对象,这样既可以避免 ...
ReentrantReadWriteLock
- 博客分类:
- 多线程
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 ...