Java中的线程
目录
简单介绍
基本概念
创建线程的两种主要方式
继承Thread类
实现Runnable接口
线程声明周期
线程控制方法
线程同步
synchronized关键字
Lock接口
线程池(Executor框架)
现代Java并发工具
最佳实战
简单介绍
线程是Java并发编程的核心概念,允许程序同时执行多个任务。
基本概念
- 线程(Thewad):程序执行的最小单元,是进程中的一个独立执行路径
- 主线程:每个Java程序启动时都会创建一个主线程,执行main()方法
- 多线程:一个程序中同时运行多个线程的能力
创建线程的两种主要方式
继承Thread类
class MyThread extends Thread {public void run() {// 线程执行的代码}
}// 使用
MyThread thread = new MyThread();
thread.start();
实现Runnable接口
class MyRunnable implements Runnable {public void run() {// 线程执行的代码}
}// 使用
Thread thread = new Thread(new MyRunnable());
thread.start();
线程声明周期
- 新建(New):线程对象被创建但尚未启动
- 就绪(Runnable):调用start()后,等待CPU调度
- 运行(Running):获得CPU资源,执行run()方法
- 阻塞(Blocked):线程暂停执行,等待某些条件满足
- 终止(Terminated):run()方法执行完毕或异常退出
图示:
线程控制方法
- start():启动线程
- run():定义线程执行体
- sleep(long milliis):使线程休眠指定毫秒数
- join():等待该线程终止
- interrupt():终端线程
- isAlive():测试线程是否处于活动状态
线程同步
当多个线程访问共享资源时,需要使用同步机制:
synchronized关键字
// 同步方法
public synchronized void method() {// 临界区代码
}// 同步块
synchronized(obj) {// 临界区代码
}
Lock接口
Lock lock = new ReentrantLock();
lock.lock();
try {// 临界区代码
} finally {lock.unlock();
}
线程池(Executor框架)
Java提供了线程池来高效管理线程:
ExecutorService executor = Executors.newFixedThreadPool(5);
executor.execute(new RunnableTask());
executor.shutdown();
现代Java并发工具
- Future和Callable:可返回结果的线程
- CountDownLatch:同步辅助类
- CyclicBarrier:可重复使用的同步屏障
- Semaphore:计数信号量
- CompletableFuture:异步编程的强大工具
最佳实战
- 优先实现Runnable接口而非继承Thread类
- 使用线程池而非直接创建线程
- 尽量减少同步范围,提高性能
- 使用更高层次的并发工具而非直接使用wait/notify
- 注意处理线程中断