- 浏览: 7340555 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 2085This article shows how to proc ... -
【转】Distributed Data Management in Oracle Coherence
2013-06-25 13:55 1895This article shows how to prov ... -
【转】How to distribute Spring Beans by using Coherence
2013-06-21 17:24 1972转载自: http://www.onli ... -
关于H2使用的那些事
2012-12-14 16:40 27223在项目中采用H2作为工 ... -
【转】ConcurrentHashMap之实现细节
2012-12-10 14:32 1777Conc ... -
【转】Java并发编程J.U.C之Condition
2012-12-10 13:14 1916转载自http://www.golde ... -
【转】Java并发编程J.U.C之锁的获取与释放
2012-12-10 13:07 1617转载自 http://www.g ... -
【转】JUC 基础内容概述
2012-12-10 13:01 2051Concurrent Programming in Jav ... -
【转】Java并发编程之ConcurrentHashMap
2012-12-10 12:56 1779ConcurrentHashMap Conc ... -
【转】单例模式完全解析
2012-12-07 12:58 1710本文将探讨单例模式的各种情况,并给出相应的建议。 单例模式应该 ... -
【转】JAVA并发容器代码随读
2012-12-06 15:29 2954转载自 http://rdc.taobao.c ... -
【转】Spring 事务管理高级应用难点剖析:
2012-12-04 16:29 2231转载自 http://www.ibm.com/deve ... -
【转】Struts2的线程安全 和Struts2中的设计模式----ThreadLocal模式
2012-12-04 15:11 4484转载自 http://downpour.ite ... -
Hibernate延迟加载和OpenSessionInView
2012-12-03 17:13 3172ThreadLocal& ... -
关于ThreadLocal分析和总结
2012-12-03 15:56 1864什么是ThreadLocal? ... -
【转】java线程阻塞中断和LockSupport的常见问题
2012-12-03 13:30 1794转载自 http://www.iteye ... -
java 中 ReentrantReadWriteLock的读锁和写锁的使用
2012-11-30 17:14 10442jdk文档中关于Reentr ... -
java 多线程中Semaphore信号量
2012-11-30 15:39 3755Semaphore信号量: 可以维护当前 ... -
Java 文件锁的使用
2012-11-30 13:21 4438多线程-内部锁、重进入 多线程 ... -
【转】线程安全与锁优化
2012-11-29 16:17 1891转载自http://xussen.iteye.com/blo ...
相关推荐
Java文件操作封装类
java日期操作类 操作java日期 替换simplatedateformate
java数据库操作类
此工具类只用于Java后端在操作Properties文件的时候写的工具类,方便properties文件的存取操作
在Java四子棋项目中,面向对象编程(OOP)概念是核心,如类(Class)、对象(Object)、继承(Inheritance)和多态(Polymorphism)等。游戏的核心类可能包括棋盘(Board)、棋子(Coin)、玩家(Player)和游戏逻辑...
java 文件操作工具类
Java并发工具类库(java.util.concurrent)是并发编程中的另一个重要主题,包括Atomic类(提供原子操作)、Semaphore(信号量)、CountDownLatch(计数器门锁)、CyclicBarrier(循环栅栏)和Exchanger(交换器)等...
一个产生随机数的操作类,可自由定制随机数的类型个数等 用于产生校验码等
首先,我们了解Java中进行文件操作的基础类:`java.io.File`。这个类是文件和目录路径名的抽象表示,它提供了许多与文件和目录相关的操作方法。 1. **文件对象的创建**: - 使用`new File(String path)`构造函数...
在`java.io`包中,包括了File、InputStream、OutputStream、Reader、Writer等类,用于进行文件和流的操作。 2. **File类**: - **创建文件**:`File file = new File("path"); file.createNewFile();` - **删除...
我自己写的一个时间组建,主要是计算两个时间段之间的相隔时间 和一个时间与现在时间之间的时间差....
在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法等对象。枚举(Enumeration)是Java中的一个特殊类类型,用于定义一组常量。本项目"test-enum-demo-...
总而言之,"Java思维导图"可能涵盖了这些核心概念,包括但不限于类的定义、继承、接口、访问修饰符、关联关系、聚合与组合、方法以及面向对象的三大原则。通过深入学习这张图,开发者可以更好地理解和应用Java的类...
3. **java.io**: 提供了输入输出流相关的类和接口,用于进行数据的读写操作。例如,FileInputStream和FileOutputStream用于文件的读写,BufferedReader和PrintWriter用于字符流的处理,而ObjectInputStream和...
根据OFD文件打包规范编写的OFD电子发票关键信息识别...整个类无第三方引用包,使用纯dom编写,使用方便稳定。程序可识别出电子发票上的发票代码、发票号码、合计税额、合计金额、开票日期等信息,且读取后不创建文件。
例如,`java.util.Arrays`就是Java内置的一个工具类,提供了对数组的各种操作。 ### 2. `ProcessUtil` 类概述 `ProcessUtil.java`文件中的`ProcessUtil`类很可能是用来处理系统进程的工具类。在Java中,我们可以...
"C# ACCESS 数据库操作类"是一个自定义的C#类,设计用来简化对Access数据库的增、删、改、查等操作。这个类通常封装了ADO.NET的核心组件,如Connection、Command、DataAdapter和DataSet,使得代码更加模块化和易于...
4. **ClassUtils.java**: 类操作工具类,提供了一些辅助方法,比如加载类、检查类是否实例化、获取类的属性和方法等。在Spring框架中,有类似的名字为`org.springframework.util.ClassUtils`,它提供了很多实用的类...
本文将详细解析“java开发常用工具类大全”中涉及的关键知识点,包括但不限于输入字符校验、数据转换、网络操作、加密解密、JSON处理、图像操作以及数据库操作。 1. **输入字符校验类**: 这类工具通常包含对字符...
为了在Java环境中与这些Web服务交互,我们需要将WSDL文件转换为Java类,这就是`wsdl2java`工具的作用。 `wsdl2java`是Apache Axis项目的一部分,它是一个强大的工具,可以自动生成Java客户端和服务端代码,这些代码...