`
JAVA天地
  • 浏览: 673681 次
  • 性别: Icon_minigender_1
  • 来自: 太原
文章分类
社区版块
存档分类
最新评论

多线程的环境中,尽量采用线程池

阅读更多

我个人比较喜欢线程,因为线程可以同时并发处理多个请求,于是乎我在编写线程的总是以如下方式启动:

没有错吗,是不是很爽,如果有多少个请求,就产生多少个线程,请像在门口待客的接待员一样,让每个客人都马上得到处理,程序绝对正确,你不信到其它地方搜索一下,启动和调用都是正确的。

可是这样的编写方式,绝对只适合小量访问的环境中,并且要保证不会有大量的并发发生才可以勉强这样写,我做过试验,如果是50个并发,还勉强可以接受,如果有1000个,也许就要丢掉一大半了,我做过如下试验:

并发50,循环100次,就有一大群线程,因为缺少资源等等原因活不过来,偶尔能够全部活过来(在金融系统中千万不能够有这样的问题,少一个0就值多少钱,我一辈子的工资都不够)。

要保证全部存活,就要让多出来的线程等等,有资源的时候也处理,没有资源就在外面吹吹风吗,宁愿慢,不可以乱吗。这个时候就必须要用到线程池了,线程池是个什么样的概念,我这里简而言之,具体的请上网去查相关的概念。

线程池,就是在调用线程的时候初使化一定数量的线程,有线程过来的时候,先检测初使化的线程还有空的没有,没有就再看当前运行中的线程数是不是已经达到了最大数,如果没有,就新分配一个线程去处理,就像餐馆中吃饭一样,从里面叫一个服务员出来;但如果已经达到了最大数,就相当于服务员已经用于了,那没得办法,另外的线程就只有等了,直到有新的“服务员”为止。线程池的优点就是可以管理线程,有一个高度中枢,这样程序才不会乱,保证系统不会因为大量的并发而因为资源不足挂掉。这个时候既然知道了线程池的优点,那么我们启动线程的时候就要换一种方式了:

可以看出这里的启动和上面没有多大的差别,这样写还更简洁,只是需要初使化一些必须的参数而已。

参考文章:http://blog.sina.com.cn/s/blog_568c94a301000ebj.html

分享到:
评论

相关推荐

    JAVA技巧(Java多线程运行时,减少内存占用量).pdf

    本文介绍了在Java多线程环境下减少内存占用量的一些关键策略,包括线程生命周期管理、对象生命周期设计、同步机制选择、线程池的使用和线程数量控制。同时,代码的异常处理和JVM参数调优也是提升多线程应用性能的...

    多线程下mysql连接数过多解决demo

    在多线程环境中,MySQL连接数过多的问题是一个常见的性能瓶颈,尤其在高并发的应用场景下。这通常是由于每个线程创建一个独立的数据库连接导致的,当并发线程数量增加时,连接池中的连接数量也随之增加,如果超过...

    1 消息队列MQ+多线程任务+业务处理

    9. **消息顺序**:对于对消息顺序有要求的场景,需要考虑如何在多线程环境下保证消息的处理顺序。 通过以上分析,我们可以看出“1 消息队列MQ+多线程任务+业务处理”这一主题涉及到的技术深度和广度,它涵盖了软件...

    java多线程设计模式详解

    在多线程环境中,多个线程可能会同时操作同一资源,这可能导致资源状态的不一致。为了解决这一问题,Java提供了synchronized关键字来实现线程间的同步。synchronized可以用于方法或者代码块上,确保在任何时刻只有一...

    多线程批量操作超级列表框例子写得一个新手鱼刺多线程

    3. **线程同步与UI更新**:在多线程环境中,只有主线程可以安全地修改UI组件,因此在其他线程中修改超级列表框时,必须使用Invoke或BeginInvoke。这两个方法会确保在主线程中执行指定的委托,从而避免线程不安全的...

    多线程使用同一数组测试

    为确保多线程环境下的数组操作正确无误,有以下几种策略可以采用: 1. **锁定(Locking)**:使用`Monitor`类或`SyncLock`关键字对数组访问进行同步。例如,在VB.NET中,可以将数组作为锁对象,确保同一时间只有一...

    java多线程设计模式

    另一个例子是线程安全的单例模式,通过`synchronized`关键字或`Double-Check Locking`策略确保在多线程环境中正确地创建和访问单个实例。 在多线程编程中,同步是非常关键的概念。Java提供了多种同步机制,如`...

    多线程编程

    - 在多线程环境中,必须正确处理异常,防止程序崩溃或不稳定。 5. **测试和调试**: - 多线程程序的测试和调试非常重要,应使用专门的工具和技术进行。 #### 七、总结 多线程编程是一种复杂但极其重要的技术,在...

    多核程序设计技术-通过软件多线程提升性能(中文版)

    - **线程安全**:确保程序在多线程环境中正确运行的一个重要方面就是确保代码的线程安全性。这通常涉及到对共享数据的保护以及避免竞态条件。 - **线程池**:线程池是一种管理线程的机制,它可以预先创建一定数量的...

    java多线程

    - **volatile关键字**:保证了多线程环境下变量的可见性,但不保证原子性。 - **ThreadLocal**:为每个线程提供独立的变量副本,避免数据冲突。 3. **线程池** - **ExecutorService**:Java并发框架的核心接口,...

    高效linux的多线程编程经验12条总结

    本文旨在总结Linux多线程编程中常见的问题及解决策略,通过12条高效编程经验帮助开发者更好地理解和掌握Linux多线程编程技巧,避免常见错误,提高程序的稳定性和性能。以下是本文将要深入探讨的几个关键点: 1. **...

    27道顶尖的Java多线程、锁、内存模型面试题!.zip

    - **synchronized**:确保共享变量在多线程环境中的有序性和原子性。 - **happens-before原则**:定义了操作间的内存可见性。 3. **锁机制** - **内置锁(监视器锁)**:由`synchronized`关键字实现,自动获取与...

    iOS 如何高效的使用多线程

    开发者应当根据任务特性合理分配线程,控制线程数量,平衡线程优先级,并确保主线程的流畅,同时利用锁来保证多线程环境下的数据安全。通过这些实践,可以构建出更加高效、响应快速的iOS应用程序。

    java thread的教程

    在多线程环境中,需要注意异常处理,因为异常可能会在一个线程中发生,但需要在另一个线程中被捕获和处理。 --- #### 三、线程的生命期 线程的生命期涵盖了从创建到结束的整个过程。了解线程的生命期对于理解线程...

    LinuxIO通信模型漫谈[整理].pdf

    为了解决这个问题,开发者通常会采用多线程或多进程技术。多线程允许每个连接都有独立的执行线程,避免一个连接的阻塞影响其他连接。Unix/Linux环境下,可以使用`pthread_create()`创建新线程,用`fork()`创建新进程...

    书---Java并发编程的艺术

    - **并发容器**:Java中的ConcurrentHashMap、CopyOnWriteArrayList等并发容器是为了在多线程环境下高效地操作集合而设计的。 ### Java并发编程的最佳实践 #### 1. 减少锁竞争 - **减少锁持有时间**:尽量减少代码...

    JAVA线程安全及性能的优化.doc

    以文档中的银行账户示例为例,为了确保账户余额的准确性,在多线程环境下进行存款和取款操作时,需要采用适当的同步机制。例如,可以使用`synchronized`关键字来保护`add`和`withdraw`方法: ```java public ...

    java及数据库性能优化

    但在多线程环境下,需注意线程安全问题,避免并发问题。 7. **其他优化策略**: - **代码优化**:编写高效、简洁的代码,避免冗余计算和不必要的数据复制。 - **数据库索引**:为常用查询字段创建索引,加快查询...

    软件工程中的并发与并行编程1.pptx

    并发容器提供了一种线程安全的数据结构,用于在多线程环境中进行数据操作。 - **概念**:常见的并发容器包括`ConcurrentHashMap`、`CopyOnWriteArrayList`等,它们提供了不同的并发访问策略。 - **种类**:在使用...

Global site tag (gtag.js) - Google Analytics