`
luozhonghua2014
  • 浏览: 62514 次
文章分类
社区版块
存档分类
最新评论

java并发编程-线程安全1:servlet访问统计

 
阅读更多

非安全:

@NotThreadSafe
public class UnsafeCountingFactorizer extends GenericServlet implements Servlet {
    private long count = 0;

    public long getCount() {
        return count;
    }

    public void service(ServletRequest req, ServletResponse resp) {
        BigInteger i = extractFromRequest(req);
        BigInteger[] factors = factor(i);
        ++count;
        encodeIntoResponse(resp, factors);
    }

    void encodeIntoResponse(ServletResponse res, BigInteger[] factors) {
    }

    BigInteger extractFromRequest(ServletRequest req) {
        return new BigInteger("7");
    }

    BigInteger[] factor(BigInteger i) {
        // Doesn't really factor
        return new BigInteger[] { i };
    }
}

安全:

@ThreadSafe
public class CountingFactorizer extends GenericServlet implements Servlet {
    private final AtomicLong count = new AtomicLong(0);

    public long getCount() { return count.get(); }

    public void service(ServletRequest req, ServletResponse resp) {
        BigInteger i = extractFromRequest(req);
        BigInteger[] factors = factor(i);
        count.incrementAndGet();
        encodeIntoResponse(resp, factors);
    }

    void encodeIntoResponse(ServletResponse res, BigInteger[] factors) {}
    BigInteger extractFromRequest(ServletRequest req) {return null; }
    BigInteger[] factor(BigInteger i) { return null; }
}


分享到:
评论

相关推荐

    JAVA并发编程实践-线程安全-学习笔记

    在Java并发编程中,线程安全是一个至关重要的概念,它涉及到多线程环境下对共享数据的正确管理和访问。线程安全意味着当多个线程同时访问一个对象或数据时,对象的状态能够保持一致性和完整性,不会因为并发导致数据...

    servlet线程安全问题

    Servlet 线程安全问题是指在使用 Servlet 编程时,如果不注意多线程安全性问题,可能会导致难以发现的错误。Servlet/JSP 技术由于其多线程运行而具有很高的执行效率,但这也意味着需要非常细致地考虑多线程的安全性...

    软件工程师面试题.pdf

    6. Java并发编程 - synchronized关键字:用于同步方法或代码块,防止线程干扰和内存一致性的破坏。 - Java.util.concurrent.locks:并发包中的锁接口Lock。 - Java 5并发API:包括Thread、Runnable接口、wait()和...

    servlet-api-3.0.jar包

    Servlet-api-3.0.jar是Java Servlet API的第三版实现,它是开发Web应用程序的重要组成部分,特别是在基于Java的服务器端编程中。这个库包含了用于创建和管理HTTP服务端点的接口和类,允许开发者构建动态、交互式的...

    Java并发编程面试题(2022最新版)

    ### Java并发编程面试题知识点详解 #### 一、基础知识 **并发编程的优缺点** - **优点:** - **提高资源利用率:** 并发可以让多个任务共享资源,提高CPU和其他硬件资源的利用率。 - **提升系统响应速度:** 多...

    java经典面试题目-面经-java-Java语言的进阶概念-常用的库和框架-并发编程-网络编程-Web开发-面经

    Java并发编程涉及线程、锁、并发工具等,如synchronized关键字、ReentrantLock、CountDownLatch、CyclicBarrier等。线程池通过ExecutorService管理线程,提高资源利用率,可以通过ThreadPoolExecutor创建。 ...

    Java就业培训教程

    - Java并发工具类:Executor框架、CountDownLatch、CyclicBarrier等 ### 实战项目经验 #### 7. Web开发基础 - HTTP协议介绍 - Servlet技术详解 - JSP页面技术 - MVC设计模式 #### 8. 框架学习 - Spring框架:...

    深入Java Servlet 网络编程

    <servlet-name>MyServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myservice</url-...

    Java并发编程面试题

    但同时,Java并发编程也存在一些缺点,如线程安全问题、死锁问题等。 在Java程序中,多线程的运行安全可以通过使用synchronized关键字、Lock类、volatile关键字、CAS操作等实现。同时,Java也提供了线程池、...

    深入Java Web心脏:Servlet工作原理全解析

    - **多线程**:Java内置的多线程支持,方便开发者构建并发程序。 - **网络编程**:Java提供了丰富的网络通信API,简化了网络应用的开发过程。 - **安全性**:Java的安全管理器可以限制应用程序对系统资源的访问,...

    Java-In-A-Nutshell-5th-Edition(2)

    9. **并发编程** - volatile关键字:保证变量在多线程环境中的可见性。 - synchronized:实现线程同步,保证数据的一致性。 10. **Java EE与微服务** - Java EE(现更名为Jakarta EE):提供服务器端开发框架,...

    Java软件开发工程师笔试题(答案)剖析.pdf

    1. Java基础 - Java字符编码:主要介绍字符编码的类型,如Unicode,它是一种为世界上大多数书面语言提供统一编码的国际标准,用于表示文本文件中的字符。 - Java关键字和修饰符:例如final、static、abstract等,...

    java学习目录

    Java学习目录是一个全面掌握Java编程语言的指南,涵盖了从基础到高级的各种主题。在这个学习路径中,我们将深入探讨Java的核心概念、语法、类库以及实际应用。以下是一份详细的Java学习知识点大纲: 1. **Java简介*...

    深入Java Servlet网络编程

    - **线程安全**:Servlet实例可能被多个请求共享,需要注意线程安全问题。 - **异步处理**:Java Servlet 3.0引入了异步处理,可以提高并发性能。 - **缓存策略**:合理利用HTTP缓存机制,减少服务器负载。 7. *...

    java并发编程技术

    Java并发编程技术是Java开发中的重要领域,它涉及到如何在多线程环境下高效地执行程序。并发编程可以充分利用多核处理器资源,提高系统的响应速度和处理能力。以下是一些核心的知识点: 1. **并行程序**:并行程序...

    应用程序设计编制JAVA培训和鉴定标准---技能鉴定.doc

    - 并发编程:深入理解Java内存模型,掌握并发控制工具如synchronized、Lock等。 - 性能优化:理解垃圾回收机制,进行性能调优,包括JVM参数调整、代码优化等。 - 容器技术:如Docker和Kubernetes,用于部署和管理...

    java学习笔记,全程

    - 线程的概念:解释并发与并行,理解线程的生命周期。 - 创建线程:通过Thread类和Runnable接口创建线程。 - 线程同步:学习synchronized关键字、wait()、notify()和notifyAll()的使用,防止数据竞争问题。 8. *...

Global site tag (gtag.js) - Google Analytics