- 浏览: 7315732 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
java.util.concurrent.atomic 包中包括了原子变量( atomic variable )类,这些类用来实现数字和对象引用的原子状态的转换,把long类型的计数器替换成AtomicLong类型的,我们可以确保所有访问计数器状态的操作都是原子的,计数器是线程安全的了,而计数器的状态就是servlet的状态,所以我们的servlet再次车归纳为线程安全的了。
使用java.util.concurrent包中支持多线程的数据结构类(如:ConcurrentHashMap等),对写多线程JAVA程序带来很多方便.其中:java.util.concurrent.atomic包是提供原子操作的基本类.如:AtomicLong类.为了提高性能,AtomicLong等类在实现同步时,没有用synchronized关键字,而是直接使用了最低层(本地c语言实现代码)来完成的,因而你是看不到用synchronized关键字的.
比如:AtomicLong类中原子操作方法:
public final boolean compareAndSet(long expect, long update) ;
就是直接使用SUN公司低层本地代码的原子方法(native方法):
public final native boolean compareAndSwapLong(...)
来实现的.
如下面的Servlet的非安全线程的:
package com.etrip.web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class CountServlets */ public class CountServlets extends HttpServlet { private static final long serialVersionUID = 1L; //记录访问此Servlet的数量 private static long count=0; /** * @see HttpServlet#HttpServlet() */ public CountServlets() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response) */ @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter pw=response.getWriter(); count++; pw.print("当前的请求次数为为:"+count); pw.flush(); pw.close(); } }
利用像AtomicLong这样已有的线程安全对象管理类的状态是非常实用的,相对于非线程安全对象,判断一个线程安全对象的可能状态和状态的转换要容易的多了,这简化了维护和验证 线程安全性的工作。
package com.etrip.web; import java.io.IOException; import java.io.PrintWriter; import java.util.concurrent.atomic.AtomicLong; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.concurrent.atomic.*; /** * * * */ public class CountExtServlet extends HttpServlet { private static final long serialVersionUID = 1L; //记录访问此Servlet的数量 private final AtomicLong count=new AtomicLong(0); /** * @see HttpServlet#HttpServlet() */ public CountExtServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response) */ @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter pw=response.getWriter(); count.incrementAndGet(); pw.print("当前的请求次数为为:"+count.get()); pw.flush(); pw.close(); } }
Java中提供的原子操作类
AtomicInteger,AtomicBoolean,AtomicLong,AtomicReference等。这是由硬件提供原子操作指令实现的。在非激烈竞争的情况下,开销更小,速度更快。
为了确保线程的全权,“检查再运行”操作(如惰性初始化)和读改写操作(如自增)必须是原子操作。
我们将“检查再运行” 和读改写操作的全部执行过程看作是符合操作。为了保证线程安全,操作必须原子
地执行。
发表评论
-
【转】Coherence Event Processing by using Map Trigger Feature
2013-06-25 14:02 2070This article shows how to proc ... -
【转】Distributed Data Management in Oracle Coherence
2013-06-25 13:55 1881This article shows how to prov ... -
【转】How to distribute Spring Beans by using Coherence
2013-06-21 17:24 1954转载自: http://www.onli ... -
关于H2使用的那些事
2012-12-14 16:40 27155在项目中采用H2作为工 ... -
【转】ConcurrentHashMap之实现细节
2012-12-10 14:32 1758Conc ... -
【转】Java并发编程J.U.C之Condition
2012-12-10 13:14 1895转载自http://www.golde ... -
【转】Java并发编程J.U.C之锁的获取与释放
2012-12-10 13:07 1607转载自 http://www.g ... -
【转】JUC 基础内容概述
2012-12-10 13:01 2035Concurrent Programming in Jav ... -
【转】Java并发编程之ConcurrentHashMap
2012-12-10 12:56 1761ConcurrentHashMap Conc ... -
【转】单例模式完全解析
2012-12-07 12:58 1690本文将探讨单例模式的各种情况,并给出相应的建议。 单例模式应该 ... -
【转】JAVA并发容器代码随读
2012-12-06 15:29 2941转载自 http://rdc.taobao.c ... -
【转】Spring 事务管理高级应用难点剖析:
2012-12-04 16:29 2213转载自 http://www.ibm.com/deve ... -
【转】Struts2的线程安全 和Struts2中的设计模式----ThreadLocal模式
2012-12-04 15:11 4465转载自 http://downpour.ite ... -
Hibernate延迟加载和OpenSessionInView
2012-12-03 17:13 3162ThreadLocal& ... -
关于ThreadLocal分析和总结
2012-12-03 15:56 1847什么是ThreadLocal? ... -
【转】java线程阻塞中断和LockSupport的常见问题
2012-12-03 13:30 1786转载自 http://www.iteye ... -
java 中 ReentrantReadWriteLock的读锁和写锁的使用
2012-11-30 17:14 10427jdk文档中关于Reentr ... -
java 多线程中Semaphore信号量
2012-11-30 15:39 3742Semaphore信号量: 可以维护当前 ... -
Java 文件锁的使用
2012-11-30 13:21 4417多线程-内部锁、重进入 多线程 ... -
【转】线程安全与锁优化
2012-11-29 16:17 1869转载自http://xussen.iteye.com/blo ...
相关推荐
java mysql 操作类 用面向对象的思路封装大部分mysql的操作
java操作ldap类java操作ldap类java操作ldap类
文件工具类java操作文件工具类java操作文件工具类java操作文件工具类java操作文件工具类
Java操作Elasticsearch(ES)工具类的整理主要聚焦于如何使用Java API与Elasticsearch进行交互,包括索引管理、文档操作、查询与聚合等核心功能。在给定的"java操作es工具类整理.rar"压缩包中,EsClientTest.java是...
该项目为基于Java的数据库操作类设计源码,总计包含74个文件,主要涵盖69个Java源文件、2个Gradle配置文件、1个Git忽略文件以及1个LICENSE文件。该类库实现了SQL的动态拼装功能,并支持在JPA环境下处理复杂原生SQL...
在Java编程语言中,工具类(Utility Class)是包含各种静态方法的类,这些方法用于执行特定任务,如数据操作、文件处理、数学计算等。它们通常不包含实例变量,只提供静态方法服务,帮助开发者提高代码的复用性和...
Java PDF实现电子签章是PDF文档处理中的一个重要技术,它涉及到PDF库的使用以及数字证书的应用。在这个场景中,我们关注的是使用iTextPDF和PDFBox两个流行的Java库来完成电子签章的功能。这两个库提供了丰富的API,...
[工具类] 文件操作工具类 .java.txt [工具类] 序列化保存为XML文件的工具类 .java.txt [工具类] 一个压缩工具类.java.txt [工具类] 用java编写简单UDP网络通信程序 .java.txt [工具类] 中文验证.jsp.txt [工具类] ...
在这个游戏中,Player类可能继承自一个抽象的PlayerBase类,Game类可能会有抽象方法如makeMove(),让玩家进行操作。 5. **游戏逻辑**:实现游戏逻辑包括判断胜负条件、检查是否有空位可下、切换玩家等。这通常在...
分享一个Java字符串操作类CTool.java源代码下载,包括了字符串转换功能,此类中收集Java编程中WEB开发常用到的一些工具。为避免生成此类的实例,构造方法被申明为private类型的。这个类的功能可实现将数据从数据库中...
java视频教程 Java文件操作 JavaFile
"基于Java的实例源码-注册表操作类 jared.zip" 提供了一个用Java实现的注册表操作类,这对于理解如何在Java应用程序中与Windows注册表交互非常有帮助。下面将详细介绍这个知识点。 首先,Windows注册表是一个存储...
为了弥补这个不足,开发人员可以使用Java Native Access (JNA),这是一个Java平台上的库,允许Java代码调用本机库函数,与操作系统进行更直接的交互。 JNA是Java与本机代码之间的一个桥梁,它消除了编写C/C++头文件...
Java Util是Java标准库中的一个核心包,包含了大量用于处理各种通用任务的类,如集合操作、日期时间处理、字符串操作等。这些工具类通常具有高度的可重用性,遵循单一职责原则,使得开发者能够快速地解决特定问题。 ...
在Java中,我们可以使用内置的`java.util.concurrent`包中的`Semaphore`类来实现PV操作,但这里我们将探讨如何利用`wait()`和`notify()`方法进行模拟。 首先,理解生产者-消费者问题是关键。生产者负责生产数据,而...
在Java编程中,随机读写Java类文件是一个高级主题,涉及到对字节码级别的操作,通常用于类的动态加载、代码注入或者逆向工程等场景。以下是对这一主题的详细阐述: 1. **Java类文件结构**:首先,了解Java类文件的...
java操作mongodb的工具类,增删查改方法
为了深入理解和正确实施这一机制,本文将阐述有效处理Java异常的三个重要原则,并结合JCheckbook类的示例进行讨论。 首先,Java中的异常是由Throwable类的层次结构所定义的,其中包含了Error、Exception以及...
呵呵,无聊玩QQ农场偷菜,用JAVA写的一个对鼠标操作的类。主要用鼠标定位屏幕的X坐标和Y坐标进行操作。需要传入几个参数,主要如下: * @param startX 好友栏第一个好友起始X坐标 * @param startY 好友栏第一个好友...