`
fjjiaboming
  • 浏览: 33296 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java interface ExecutorService -- Practice.

    博客分类:
  • JAVA
阅读更多
前几天, 写完一个幕后扫描程序, 由于业务存在多对多的站点关系, 为了程序逻辑简单化, 牺牲掉一些硬件资源 来动态创建N个线程池(是池子哦).

结果悲剧发现: 公司服务器资源耗尽, 其它应用都跑不了, 系统宕机, 运维同事用不了命令.
幸好, 幸好, 有经验丰富的压力测试的同事帮顶住了, 结果2分钟解决BUG, 哈哈!
题外话, 技术组人员配置一定要有经验丰富的~

1.程序日志, 没有任何异常, 因为都是些普通业务, JMX 重型编程 没有在本程序中使用.
2.系统日志:
automount[4228]: expire_proc: expire thread create for /misc failed
automount[4228]: expire_proc: expire thread create for /misc failed
automount[4228]: expire_proc: expire thread create for /net failed
automount[4228]: expire_proc: expire thread create for /misc failed
automount[4228]: expire_proc: expire thread create for /net failed
automount[4228]: expire_proc: expire thread create for /misc failed
automount[4228]: expire_proc: expire thread create for /net failed
automount[4228]: expire_proc: expire thread create for /misc failed
automount[4228]: expire_proc: expire thread create for /net failed
automount[4228]: expire_proc: expire thread create for /misc failed
automount[4228]: expire_proc: expire thread create for /net failed
automount[4228]: expire_proc: expire thread create for /misc failed
automount[4228]: expire_proc: expire thread create for /net failed
automount[4228]: expire_proc: expire thread create for /misc failed
automount[4228]: expire_proc: expire thread create for /net failed
.......................
fork: Resource temporarily unavailable



一看 fork. 我就直接想起 fork/join 并发编程的模型, 也不知道两者是不是有直接关系.

同事, 提醒线程太多 撑爆了系统!
我和同事都认为 Java GC 会直接回收ExecutorService 对象啊! 事实相反, thread 一多也是很耗资源!
Java Doc :
/*
* An unused ExecutorService should be shut down to allow reclamation of its resources....   
* @since 1.5
* @author Doug Lea
*/


程序结构,修改BUG后:
public class ChecksumsCalculatorServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
                AsynService calculator = new AsyncServiceImpl(siteId, nodeName, someInfos,
                        requestCallbackImpl);
                Thread t = new Thread(calculator);
                t.start();
    }
}

public class AsyncChecksumsServiceImpl implements AsyncChecksumsService {
    private ExecutorService threadPool; // 悲剧就在这.
    //init in construct.
    public void run() {
       try{
           // threadPool do something
           // get Future
       }catch(...){
       }finally{
            /**let GC  do its work*/
            threadPool.shutdown(); 
            threadPool = null;
       }
    }
}


总结:
大资源由原来的三个类型 Stream , Connection, GUI 图形对象,
现在增加一个类型interface ExecutorService,
此四类都要用完都要关闭资源!

悲剧源自数据量巨大, GC 不能回收用完的池子, 实战大数据并发编程才开始不久!
经验不足, 只能救助于书了!
并发编程推荐, 读英文好!
Addison.Wesley.Java.Concurrency.in.Practice.May.2006.


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
有应聘"Java工程师/架构师", 请发邮件至: linzuxiong1988@gmail.com, 并取得联系.
工程师招聘,岗位见: http://job.youzan.com 请联系我: linzuxiong1988@gmail.com
分享到:
评论
1 楼 higkoo 2011-10-28  
总结得非常好。

一回生二回熟,经验就是一步步来的了。 

相关推荐

    Java-Concurrency-in-Practice.rar

    《Java并发编程实践》是Java并发编程领域的一本经典著作,由Addison-Wesley于2006年出版。这本书深入浅出地探讨了Java平台上的多线程和并发编程,为开发者提供了实用的指导和最佳实践。下面将详细阐述其中的知识点。...

    Java API 文档 jdk-17.0.2-doc-all

    Java API文档是Java开发者的重要参考资料,它包含了Java开发工具包(JDK)中的所有类、接口、枚举和注解的详细说明。这份"jdk-17.0.2_doc-all"文档集全面覆盖了Java 17.0.2版本的特性,是理解、学习和使用Java编程...

    Java-SE-class-library-.zip_java se

    这个"Java-SE-class-library-.zip"压缩包包含了详细的Java SE类库查询手册,旨在为Java开发者提供详尽的参考信息。下面将详细介绍Java SE类库中的主要组件、功能以及它们在实际开发中的应用。 1. **Java基础类库**...

    Java-concurrency-master.zip

    5. **线程池**:Java的`ExecutorService`和`ThreadPoolExecutor`允许开发者创建和管理线程池,提高线程复用,避免频繁创建和销毁线程的开销。 6. **Future和Callable**:`Future`接口代表异步计算的结果,而`...

    Java-Thread-Affinity,将Java线程绑定到给定的内核.zip

    2. **线程池支持**:可能扩展了`java.util.concurrent.ExecutorService`接口,使得线程池中的线程也可以根据策略绑定到特定的核心。 3. **平台兼容性**:考虑到跨平台兼容性,该项目可能实现了对Linux、Windows、...

    JAVA 编程 API基础 JAVA开发平台,JAVA编程资源----JAVA API.zip

    Java API(Application Programming Interface)是Java开发平台的核心组成部分,它为开发者提供了丰富的类库和接口,使得编写Java程序变得更加高效和便捷。这个压缩包“JAVA 编程 API基础 JAVA开发平台,JAVA编程...

    java-utility-programming-skills-.zip_java programming

    本资源“java-utility-programming-skills-.zip”包含了一份关于Java实用编程技巧的.chm帮助文档,这对于深化Java编程理解以及提升技能水平非常有帮助。以下是基于这个主题的详细知识点讲解: 1. **异常处理**:...

    Core-Java-2.-Volume-II.rar_Core Java Volume II_core java II_core

    8. **Java Native Interface (JNI)**:JNI允许Java代码调用C/C++库,实现了Java与本地代码的交互,这对于提升性能或使用特定平台的功能很有帮助。 9. **Java安全性**:Java的安全模型包括类加载器、权限模型和沙箱...

    ExecutorService.shutdown()应该是在线程执行完毕后,才会去关闭

    在Java多线程编程中,`ExecutorService`是线程池的一个重要接口,它提供了管理和控制线程执行的能力。当我们创建一个`ExecutorService`实例并提交任务时,我们可以通过调用`shutdown()`方法来关闭线程池。然而,标题...

    java-version--VSM.rar_VSM JAVA_java VSM_java-version--VSM_vsm_文件

    Java的Thread类和ExecutorService接口可以实现这一功能。 7. **结果展示**:最后,计算出的相似度可能会以某种形式输出,比如打印到控制台或写入文件。 这个项目对于信息检索、文本挖掘或数据分析等领域有实际应用...

    tascalate-concurrent:阻塞(IO绑定)的实现可取消java.util.concurrent.CompletionStage和java.util.concurrent.ExecutorService-s的相关扩展

    此功能增强了唯一的Java 8内置实现 ,该实现主要支持计算任务。 此外,该库还可以帮助解决许多异步编程难题,例如处理超时,重试/轮询功能,协调多个并发计算的结果等。 从版本该库以多发行版JAR的形式提供,并且...

    Java-API-For-Chinese.rar_java API_java api

    5. **多线程**:`java.lang.Thread`和`java.util.concurrent`包提供了线程管理和并发控制的相关类,如`Runnable`接口和`ExecutorService`。 6. **异常处理**:`java.lang.Throwable`及其子类如`Exception`、`Error`...

    java-Simulation-strategy-game-.rar_Simulation _strategy

    让我们深入探讨这个"java-Simulation-strategy-game-.rar"压缩包文件所涵盖的知识点。 1. **Java编程**:Java是一种广泛使用的面向对象的编程语言,它具有跨平台性、安全性以及丰富的类库。在这个项目中,Java被...

    Wrox.Java.Programming.24-Hour.Trainer.2011

    《Wrox.Java.Programming.24-Hour.Trainer.2011》是一部关于Java编程的详尽教程,旨在帮助初学者和有一定基础的开发者在24小时内掌握Java编程的核心概念和技术。这本书由Wrox出版社出版,是Java学习者的宝贵资源。 ...

    java-pixel-level-image.zip_java pixel

    例如,使用Java的ExecutorService或者并发工具类,可以将图像分割成多个部分,然后在不同的线程上并行处理。 在实际项目中,开发者需要根据需求选择合适的图像处理库,如Java Advanced Imaging (JAI)、JavaFX的...

    java面试java-interview-guide-master.zip

    Java面试是每位Java开发者在求职过程中必须面对的重要环节。这份"java面试java_interview_guide-master.zip"资源显然是为准备Java面试而设计的,包含了丰富的Java技术知识点和面试常见问题。以下将从Java语言基础、...

    [Java并发编程实践].(Java.Concurrency.in.Practice).Brian.Goetz.英文原版.pdf

    书中介绍了如何使用`ExecutorService`等接口和类。 - **并发集合**:Java提供了多种并发集合类,如`ConcurrentHashMap`等,用于解决多线程环境下数据结构的安全访问问题。 - **CompletableFuture**:这是一个强大的...

    Java-network-programming-code.rar_java programming

    Java的线程和并发API,如ExecutorService、Thread和synchronized关键字,可以帮助管理这些并发任务。 8. **异常处理**:网络编程中常遇到网络中断、超时等问题,因此异常处理至关重要。学习如何正确捕获和处理...

    Java-Interview-Advanced-master.zip

    - **线程池**:ExecutorService、ThreadPoolExecutor的使用,线程池的参数配置和优化。 3. **Java集合框架** - **List、Set、Queue**:它们的区别,常用实现类如ArrayList、LinkedList、HashSet、HashMap的内部...

    java-api-1.8.zip

    9. **并发改进**:Java 8对`Fork/Join`框架和`ExecutorService`进行了优化,提高了多线程编程的效率和便利性。 10. **并发集合的增强**:包括`ConcurrentHashMap`、`ConcurrentSkipListMap`等并发集合类的改进,...

Global site tag (gtag.js) - Google Analytics