在线程池中,有一个是专门定义单线程的线程池,是Executors.newFixedThreadPool。为什么要单独定义一个池,这个池有什么特别的地方呢?
1.主要是这个线程池可以在挂掉或者出异常的情况下,重新启动一个线程来执行接下去的任务。这个对开发人员就比较方便了。
/**
* <br>
* do what you want to do and never stop it.
* <br>
*/
package com.luch.thread;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @author Jack
* Jul 13, 2014
* <br>
*/
public class SingleThreadExecutorDemo implements Runnable{
/**
* @param args
*/
public static void main(String[] args) {
SingleThreadExecutorDemo demo = new SingleThreadExecutorDemo();
ExecutorService exec = Executors.newSingleThreadExecutor();
exec.execute(demo);
}
public void run() {
int temp = 0;
int i = 0;
while(true){
int j = new Random().nextInt(100);
System.out.println("temp="+ temp + ",j=" + j + ",i=" + i++ );
try {
if(temp==0 && j > 90){
temp = j/0;
}
Thread.sleep(100);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
temp = 0;
}
}
}
}
分享到:
相关推荐
Java的`java.util.concurrent`包提供了四种主要的线程池实现:`Executors.newFixedThreadPool()`, `Executors.newSingleThreadExecutor()`, `Executors.newCachedThreadPool()`以及`Executors.newWorkStealingPool()...
`java.util.concurrent.Executors` 继承自 `java.lang.Object`,作为一个工具类,它提供了一系列用于创建和管理线程池的方法,包括`ExecutorService`、`ScheduledExecutorService`、`ThreadFactory`和`Callable`等...
ExecutorService threadPool = Executors.newFixedThreadPool(10); for (int i = 0; i ; i++) { int finalI = i; threadPool.execute(new Runnable() { @Override public void run() { synchronized ...
每个实例可能代表一次数据库查询,包含具体的SQL语句和执行查询所需的参数。在`executeConcurrentQueries`中,这些`Runnable`对象会被提交到线程池进行执行。 ### 6. 并发控制与同步 在并发环境下,为了防止数据...
这里通过`Executors.newFixedThreadPool(5)`创建了一个固定大小为5的线程池。这意味着任何时候线程池中最多只能有5个线程同时运行。 ##### 4. 提交任务到线程池 ```java for (int i = 0; i ; i++) { Runnable ...
通过调用`TCPServer`的实例方法来绑定监听端口,并使用`Executors.newFixedThreadPool`创建线程池。`newFixedThreadPool`接收一个整数参数,表示线程池的大小。这意味着线程池会始终维持固定数量的线程,即使有线程...
- `Executors.newFixedThreadPool(int nThreads)`:创建一个固定大小的线程池,重复提交任务时,会复用已有线程,而不是创建新的。 - `Executors.newCachedThreadPool()`:创建一个可缓存线程池,如果线程池大小超过...
2. **FixedThreadPool**: `Executors.newFixedThreadPool(nThreads)`创建一个固定大小的线程池,它维护的线程数量始终保持不变。当一个新任务提交而所有线程都在工作时,任务会被添加到队列中等待。这种线程池适合...
ExecutorService executorService = Executors.newFixedThreadPool(3); ``` - **newSingleThreadExecutor**:创建单个线程的线程池,确保所有任务按照指定顺序(FIFO)执行。 ```java ExecutorService ...
- Executors.newFixedThreadPool(int nThreads):创建固定大小的线程池,线程数量不会改变。 - Executors.newSingleThreadExecutor():创建单线程的线程池,所有任务都在唯一的工作线程中按顺序执行。 - Executors....
filterChainBuilder.addLast("threadPool", new ExecutorFilter(Executors.newFixedThreadPool(5))); ``` 这里创建了一个固定大小的线程池,并将其作为 `ExecutorFilter` 的参数添加到 `IoFilterChain` 中。当有新...
- **使用线程池**:从Java 5开始,可以使用ExecutorService接口及其工厂方法如`Executors.newFixedThreadPool(int nThreads)`、`Executors.newCachedThreadPool()`和`Executors.newSingleThreadExecutor()`创建...
- **定长线程池**:Executors.newFixedThreadPool(int n),线程池大小固定,超出的线程请求会等待。 - **单线程线程池**:Executors.newSingleThreadPool(),线程池中只有一个线程,任务排队执行。 - **定时...
ExecutorService pool = Executors.newFixedThreadPool(10); ``` - **自定义线程池**:除了使用预设的方法创建线程池外,还可以通过`ThreadPoolExecutor`类来自定义线程池的行为。 ```java ThreadPoolExecutor...
在Java编程语言中,线程... - **使用ExecutorService**:自Java 5引入Executor框架后,推荐使用线程池来管理线程,例如`Executors.newFixedThreadPool(int nThreads)`、`Executors.newCachedThreadPool()`和`Executors....
ExecutorService internalBlockingPool = Executors.newFixedThreadPool( options.getInternalBlockingPoolSize(), new VertxThreadFactory("vert.x-internal-blocking-", checker, true) ); ``` #### 四、...
- **Executors**:这是一个工厂类,用于创建不同类型的ExecutorService实例。 - **newFixedThreadPool(int nThreads)**:创建一个固定线程数量的线程池。当有新的任务被提交时,如果线程池中的线程还没有达到...
1. **创建任务列表**:通过`Executors.newFixedThreadPool()`创建一个固定大小的线程池,该线程池维护一组预先创建好的工作线程。 2. **添加任务到列表**:将实现`Runnable`接口的任务对象添加到任务列表中,使用`...
在示例代码中,`Executors.newFixedThreadPool(2)`创建了一个固定大小为2的线程池,这意味着线程池最多同时运行两个线程。`ExecutorService.execute()`方法用于提交任务到线程池,即使在任务数量超过线程池大小时,...
在实际开发中,Java还提供了一些预定义的线程池,如`Executors.newFixedThreadPool(int nThreads)`创建固定大小的线程池,`Executors.newSingleThreadExecutor()`创建只有一个线程的线程池等。这些预定义的线程池...