java Thread(1)
来源:互联网 发布:2016年网络茶叶销售 编辑:程序博客网 时间:2024/06/07 20:54
首先来看一个线程安全的例子,一个无状态的servlet
$ThreadSafe
public class StatelessFactorizer implements Servlet{
public void service(ServletRequest req,ServletResponse resp){
BigInteger i = extractFromRequest(req);
BigInteger[] factors = factor(i);
encodeIntoResponse(resp,factors);
}
}
这个例子展示了我们简单的因数费解的Servlet,它从ServletRequest中解包数据,然后将这个数据进行因数分解,最后将结果封包到ServletResponse中。
对于这个例子因为很多人不用讲都知道它是线程安全的,首先得看一下Servlet的工作原理,对于Servlet类中这个service方法是多线程的,也就是说一有客户请求,就会调用这个方法,那么为什么说它是线程安全的。
首先它是无状态的,它不包含域也没有引用其他类的域,通俗来说就是全局变量,一次特定计算的瞬时状态,会唯一的存在本地变量中,这些本地变量存储在线程的栈中,只有执行的线程才能访问,,一个访问StatelessFactorizer的线程,不会影响访问同一个Servlet的其他线程的计算结果,因为两个线程不共享状态,它们如同在访问不同的实例。
因为线程访问无状态对象的行为,(这里的无状态对象我的理解是当前的状态不会受其他线程的影响,它的状态只能受本线程的影响),不会影响其他线程访问该对象时的正确性,所以无状态对象是线程安全的。
$ThreadSafe
public class StatelessFactorizer implements Servlet{
public void service(ServletRequest req,ServletResponse resp){
BigInteger i = extractFromRequest(req);
BigInteger[] factors = factor(i);
encodeIntoResponse(resp,factors);
}
}
这个例子展示了我们简单的因数费解的Servlet,它从ServletRequest中解包数据,然后将这个数据进行因数分解,最后将结果封包到ServletResponse中。
对于这个例子因为很多人不用讲都知道它是线程安全的,首先得看一下Servlet的工作原理,对于Servlet类中这个service方法是多线程的,也就是说一有客户请求,就会调用这个方法,那么为什么说它是线程安全的。
首先它是无状态的,它不包含域也没有引用其他类的域,通俗来说就是全局变量,一次特定计算的瞬时状态,会唯一的存在本地变量中,这些本地变量存储在线程的栈中,只有执行的线程才能访问,,一个访问StatelessFactorizer的线程,不会影响访问同一个Servlet的其他线程的计算结果,因为两个线程不共享状态,它们如同在访问不同的实例。
因为线程访问无状态对象的行为,(这里的无状态对象我的理解是当前的状态不会受其他线程的影响,它的状态只能受本线程的影响),不会影响其他线程访问该对象时的正确性,所以无状态对象是线程安全的。
- Java Thread - 1
- java Thread(1)
- Java --Thread(1)
- Java -- Thread习题(1)
- Thread系列1-浅析 Java Thread.join()
- Java多线程 1 Thread类
- Java Thread 学习笔记1
- java多线程:1、Thread实现
- Java Thread Programming 1.8.1 - Inter-thread Communication
- Thread & Java
- Java Thread
- java Thread
- Java Thread
- Java Thread
- java thread
- Java Thread
- Java Thread
- Java Thread
- 通过CREATESTRUCT 的结构体对象修改窗口没效果 原因剖析
- Windows server 2008 无法建域控 提示没有管理员密码
- Android NFC 开发教程
- oracle监听器和服务配置
- array2xml和xml2array,xml与array的互相转化
- java Thread(1)
- 一日一点RakNet(33)--Cloud Computing
- 多线程群发邮件小例子
- 浅谈求最大公约数--java实现
- iOS开发应用程序UI设计的15项黄金法则
- 如何利用 Zsync 命令更新 Ubuntu 光盘镜像
- JQuery EasyUi之界面设计——通用的JavaScript
- SVN 常用命令集合
- SoEasy办公效率平台