线程池,定时器,设计模式
线程池
(1)概述
程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。
而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。
线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。
(2)创建线程池
1.public static ExecutorService newCachedThreadPool(): 根据任务的数量来创建线程对应的线程个数
2.public static ExecutorService newFixedThreadPool(int nThreads): 固定初始化几个线程
3.public static ExecutorService newSingleThreadExecutor(): 初始化一个线程的线程池
(3)演示
package 线程;
public class MyRunnable extends Thread {
@Override
public void run() {
System.out.println("这个方法执行了");
}
}
package 线程;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class 线程池 {
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
//Executors.newFixedThreadPool(2);
executorService.submit(new MyRunnable());
executorService.submit(new MyRunnable());
executorService.submit(new MyRunnable());
executorService.submit(new MyRunnable());
executorService.shutdown();
System.out.println("----------------------");
ExecutorService executorService1 = Executors.newFixedThreadPool(3);
executorService1.submit(new MyRunnable());
executorService1.submit(new MyRunnable());
executorService1.submit(new MyRunnable());
executorService1.shutdown();
}
}
结果:
这个方法执行了
这个方法执行了
这个方法执行了
这个方法执行了
这个方法执行了
这个方法执行了
这个方法执行了
定时器
(1)概述
定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行。
在Java中,可以通过Timer和TimerTask类来实现定义调度的功能。
(2)主要方法
1.schedule()
安排在指定的时间执行指定的任务
2.Timer()
创建一个新计时器
3.TimerTask()
创建一个新的计时器任务
(3)举例
package 线程;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask {
Timer timer;
public MyTimerTask(Timer timer) {
this.timer=timer;
}
@Override
public void run() {
System.out.println("aaa");
}
}
package 线程;
import java.util.Timer;
import java.util.TimerTask;
public class 计时器 {
public static void main(String[] args) {
//第一种方式
Timer timer = new Timer();
MyTimerTask myTimerTask = new MyTimerTask(timer);
//五秒后执行
timer.schedule(myTimerTask,5000);
//第二种方式
Timer timer1 = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("bbb");
}
};
//表示三秒后执行,每隔四秒执行一次
timer1.schedule(timerTask,3000,4000);
}
}