多线程
①实现方式
通过继承Thread类实现一个线程
通过实现Runnable接口实现一个线程
继承扩展性不强,java总只支持单继承,如果一个类继承Thread就不能继承其他的类了。
②怎么启动?
Thread thread = new Thread(继承了Thread的对象/实现了Runnable的对象)
thread.setName(“设置一个线程名称”);
thread.start();
启动线程使用start方法,而启动了以后执行的是run方法。
③怎么区分线程?在一个系统中有很多线程,每个线程都会打印日志,我想区分是哪个线程打印的怎么办?
thread.setName(“设置一个线程名称”); 这是一种规范,在创建线程完成后,都需要设置名称。
线程并发库
JDK5中增加了Doug Lea的并发库,这一引进给Java线程的管理和使用提供了强大的便利性。 java.util.current包中提供了对线程优化、管理的各项操作,使得线程的使用变得的心应手。该包提供了线程的运行,线程池的创建,线程生命周期的控制.
Java通过Executors提供四个静态方法创建四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行
线程池的作用?
1.限定线程的个数,不会导致由于线程过多导致系统运行缓慢或崩溃
2.线程池不需要每次都去创建或销毁,节约了资源、
3.线程池不需要每次都去创建,响应时间更快。