-
一个程序里,是不是只应该只有一个线程池?0
我现在用Netty+spring+Mybatis做了一个长连接服务端,内部有多处要执行短暂的并发任务,还需要做定时任务,我需要用到ExecutorService和ScheduledExecutorService两者,但是这两者貌似一个就是一个线程池,而且我试用线程的地方有多处,我有两个问题,一能否把他们统一成一个线程池,二是我是不是必须把这个线程池作为一个全局变量(静态)才能保证到处被调用?2014年3月28日 09:28
6个答案 按时间排序 按投票排序
-
又看了一下API
Executors虽然实现线程池,但如果提交线程过多内存肯定会吃内存。利用底层ThreadPoolExecutor来实现,当队列满的时候自动阻塞。
http://heipark.iteye.com/blog/1393847这个博客讲了原理。
http://blog.163.com/nihaonihao1987@126/blog/static/111580868201151510233125/这个是spring中配置。2014年3月29日 00:26
-
问题的关键不在于使用多少个线程池, 而在于实际有多少个线程.
虽然一般线程池都会只开一个.
但是你看netty源码, 应该就知道, 其他他使用好几个线程池的.2014年3月28日 18:57
-
java代码的话就要设计全局。spring中通过配置ThreadPoolTaskExecutor也可以实现线程池,对应java中ThreadPoolExecutor,java中所有线程池底层都是ThreadPoolExecutor实现的。但手动实现ThreadPoolExecutor比较麻烦,Executors中已经对这些线程接口做了实现,帮助文档建议使用些类。
2014年3月28日 18:05
-
ScheduledExecutorService 继承ExecutorService 。都是接口啊、
Executors.newScheduledThreadPool 这个就是线程池啊。
ExecutorService es=Executors.newScheduledThreadPool 你可以用这个一个就行吧。
即可以调度
schedule方法。
submit方法就是运行线程呗。2014年3月28日 15:35
相关推荐
只有当阻塞队列满了,如果还有任务添加到线程池的话,会尝试new 一个Thread的进行救急处理,立马执行对应的runnable任务;如果继续添加任务到线程池,且线程池中的线程数已经达到了maximumPoolSize,那么线程就会就...
线程池是指在程序启动时创建的一组空闲线程,程序可以将Runnable对象或Callable对象传递给线程池,线程池就会启动一个线程来执行Runnable对象或Callable对象的run()或call()方法。 2. 为什么需要线程池? 使用...
Java中,我们通常使用`Executors`类提供的静态工厂方法来创建线程池,如`newFixedThreadPool(int nThreads)`创建固定大小的线程池,`newSingleThreadExecutor()`创建只有一个线程的线程池,`newCachedThreadPool()`...
单线程的线程池是指只有一个线程在工作的线程池,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。 ...
在Java中,我们可以使用`Executors`工厂类创建线程池,如`newFixedThreadPool`用于创建固定大小的线程池,`newSingleThreadExecutor`创建只有一个线程的线程池,`newCachedThreadPool`创建可缓存的线程池,等等。...
当有新的任务到来时,线程池会挑选一个空闲的线程来执行任务,而不是每次都创建新的线程。线程池可以控制并发的数量,防止过多的线程导致系统资源过度消耗,同时也能提高响应速度,因为线程已经处于就绪状态。 互斥...
例如,`newFixedThreadPool(int n)` 创建固定大小的线程池,`newSingleThreadExecutor()` 创建只有一个线程的线程池,`newCachedThreadPool()` 创建可缓存线程的线程池。 线程池的工作流程大致如下: 1. 当一个...
`Executors` 类是一个静态工厂类,用于创建不同类型的线程池,如固定大小的线程池、单线程线程池、缓存线程池等。 4. **创建线程池**:使用`Executors`类的静态方法创建线程池,例如 `newFixedThreadPool(int ...
3. **SingleThreadExecutor**: `Executors.newSingleThreadExecutor()`创建一个只有一个线程的线程池,所有任务都会按照提交的顺序串行执行。这个线程池适用于需要保证执行顺序的场景,比如日志记录或者数据库事务。...
- `newSingleThreadExecutor()` 创建只有一个线程的线程池,确保所有任务按顺序执行。 使用线程池可以有效地控制并发程度,避免资源过度消耗,同时提高系统的稳定性和可预测性。 总的来说,理解和熟练运用Java的...
线程锁则是线程同步的一种方式,如`lock`语句和`Monitor`类,用于确保同一时间只有一个线程可以访问特定的代码块。 "Processors2"可能是代码示例中一个处理单元或线程池中线程数量相关的类或文件,可能包含处理任务...
3. **Monitor**:使用`lock`关键字实现,基于Monitor对象,确保同一时间只有一个线程访问受保护的代码块。 4. **Monitor.TryEnter/Exit**:手动控制进入和退出临界区,避免死锁。 5. **ReaderWriterLockSlim**:读写...
6. **读写锁(ReadWriteLock)**:允许多个线程同时读取,但只允许一个线程写入,提高了并发性能。 在Java中,`java.util.concurrent.locks`包提供了各种同步工具类,如`ReentrantLock`(可重入锁)、`Semaphore`和...
线程池远不是服务器应用程序内使用多线程的唯一方法。如同上面所提到的,有时,为每个新任务生成一个新线程是...然而,由于只有一个AWT线程,因此要在AWT线程中执行任务可能要花费相当长时间才能完成,这是不可取的。
在本项目中,开发者使用Visual Studio 2008的MFC(Microsoft Foundation Classes)框架创建了一个服务器应用程序,它利用了线程并发、线程池以及线程同步技术来实现高效的服务处理。下面我们将详细探讨这些技术。 1...
单线程是指一个程序只有一个执行流,而多线程则是指一个程序可以有多个执行流,它们可以在同一时间执行不同的任务。 线程池是一种线程使用模式,它预先创建一组线程,当需要执行新任务时,从线程池中获取空闲线程,...
(AppDomain)挂钩,一个AppDomain只有一个线程池。假如在线程池中执行了一个周期较长的任务,一直占用着其中一个线程,可能就会影响到 应用程序域中的其他程序的性能。例如,假如在Asp.Net的线程池中执行一个周期较长...
- **SingleThreadExecutor**:单线程线程池,只有一个工作线程,确保所有任务按照提交的顺序执行,适合需要保持执行顺序的场景。 - **ScheduledThreadPool**:定时及周期性任务线程池,可以延迟或定期执行任务,...
创建一个只有一个线程的线程池,所有任务都在同一个线程中顺序执行,保证了执行的顺序性,但无法并发执行任务。 4. **`newScheduledThreadPool`**: 创建一个可以定时或定期执行任务的线程池,可以用于延迟执行或...
在IT领域,线程池是一种优化资源管理的技术,它通过预先创建并维护一组可重用线程来提高程序性能。线程池的概念是基于“池化”思想,即避免频繁地创建和销毁线程,而是复用已存在的线程,减少系统资源的开销。在...