Java多线程与异常处理

需积分: 7 0 下载量 84 浏览量 更新于2024-07-20 收藏 495KB PDF 举报
"java中线程" 在Java编程中,线程是并发执行的代码段,它们共享同一应用程序的内存空间,使得程序能够同时处理多个任务。`Thread`类是Java中处理线程的核心类,位于`java.lang`包中,它是所有线程的基类。了解和熟练使用线程对于编写高效的并发程序至关重要。 1. **线程的创建** - **继承Thread类**:创建一个新的类,该类继承自`Thread`类,然后重写`run()`方法。创建线程对象后调用`start()`方法启动线程。 - **实现Runnable接口**:创建一个实现了`Runnable`接口的类,实现`run()`方法。然后将`Runnable`对象作为参数传递给`Thread`类的构造函数,创建`Thread`对象并启动。 2. **线程的状态** - 新建(New):线程被创建但尚未启动。 - 可运行(Runnable):线程已启动,等待CPU分配时间片执行。 - 运行(Running):线程获得了CPU资源正在执行。 - 阻塞(Blocked):线程因等待资源、锁或I/O操作而暂停执行。 - 等待(Waiting):线程主动释放资源,等待其他线程唤醒。 - 守护(Timed Waiting):线程在等待一定时间后恢复。 - 结束(Terminated):线程执行完毕或被强制终止。 3. **线程控制** - `sleep()`: 使当前线程进入休眠状态,指定时间后自动唤醒。 - `join()`: 让其他线程等待当前线程执行完毕后再继续执行。 - `yield()`: 让出CPU执行权,但不保证立即执行其他线程。 - `synchronized`: 同步关键字,用于保护共享资源,防止数据不一致。 4. **线程同步** - ** synchronized 关键字**:通过锁定对象监视器实现线程同步,防止多个线程同时访问共享资源。 - ** volatile 关键字**:确保共享变量对所有线程可见,但不保证原子性。 - **Lock接口**:提供比`synchronized`更细粒度的锁控制,如ReentrantLock。 5. **线程中断和停止** - `interrupt()`:设置线程的中断标志,通常在循环中检查`Thread.currentThread().isInterrupted()`来响应中断。 - **不推荐直接使用stop()和destroy(),因为这些方法可能导致数据不一致和资源泄露**。 6. **线程优先级** - Java线程有10个优先级,从`MIN_PRIORITY`(1)到`MAX_PRIORITY`(10),默认优先级是`NORM_PRIORITY`(5)。但优先级并不保证绝对执行顺序,仅作为调度参考。 7. **线程池** - 使用`ExecutorService`和`ThreadPoolExecutor`可以创建线程池,管理线程生命周期,提高系统效率。 8. **死锁** - 当两个或更多线程相互等待对方释放资源,导致无法继续执行的情况称为死锁。避免死锁的关键在于正确设计资源获取顺序和避免循环等待。 9. **线程局部变量** - 使用`ThreadLocal`类,每个线程都有自己的副本,互不干扰,常用于缓存线程相关数据。 10. **守护线程(Daemon)** - 设置线程为守护线程,当所有非守护线程结束时,即使守护线程还在运行,JVM也会退出。例如,垃圾收集器就是守护线程。 理解并熟练掌握上述知识点,是编写高效、安全的多线程Java程序的基础。在实际开发中,还需要考虑线程性能优化、线程安全问题以及如何合理地利用Java提供的并发工具类,如`Semaphore`、`CyclicBarrier`、`CountDownLatch`等。