目录
线程概述
进程:正在运行的程序,负责了这个程序的内存空间分配,代表了内存中的执行区域。
线程:就是在一个进程中负责一个执行路径。
多线程:就是在一个进程中多个执行路径同时执行。
多线程的好处
- 提高计算机系统CPU的利用率
- 改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和修改
API中创建线程的两种方式
- JDK1.5之前创建新执行线程有两种方法:
- 继承
Thread
类的方式 - 实现
Runnable
接口的方式
- 继承
实现Callable
接口的方式
线程的分类
Java中的线程分为两类:一种是守护线程,一种是用户线程。
- 守护线程是用来服务用户线程的,通过在
start()
方法前调用**thread.setDaemon(true)
**可以把一个用户线程变成一个守护线程。 - Java垃圾回收就是一个典型的守护线程。
- 若JVM中都是守护线程,当前JVM将退出。
线程的同步
同步代码块和同步方法处理同步问题
lock锁方式解决同步问题
线程的通信
常用方法:
wait()
notify()
notifyall()
线程池
提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。
好处:
1.提高响应速度(减少了创建新线程的时间)
2.降低资源消耗(重复利用线程池中线程,不需要每次都创建)
3.便于线程管理
创建多线程有4种方式
Executors.newCachedThreadPool():创建一个可根据需要创建新线程的线程池
Executors.newFixedThreadPool(n); 创建一个可重用固定线程数的线程池
Executors.newSingleThreadExecutor():创建一个只有一个线程的线程池
Executors.newScheduledThreadPool(n):创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。