Java基础:废弃stop()与线程安全的中断方法

需积分: 1 0 下载量 201 浏览量 更新于2024-08-03 收藏 18KB TXT 举报
"Java基础笔记-8-17"主要涵盖了以下几个核心知识点: 1. 线程停止方法:Java早期提供了`stop()`方法来停止线程,但因其可能导致不可预料的后果,如锁无法释放或数据一致性问题,该方法已被弃用。正确的做法是避免直接使用`stop()`,而是通过异常中断(`interrupt()`)来间接控制线程。 - 异常中断法:通过抛出`InterruptedException`并在捕获时处理,可以终止线程的执行流程,例如在`ThreadStopDemo1`中,主线程在适当时间设置线程的中断标志,然后让其在`try-catch`块中捕获并重新抛出中断异常,从而结束线程。 2. `wait()`与`notify()`方法结合使用:在`ThreadStopDemo2`中,展示了如何在`wait()`方法后终止线程。当线程进入等待状态后,使用`wait()`会释放当前对象的锁。如果主线程再次调用`interrupt()`,则会唤醒正在等待的线程,但由于`wait()`捕获了`InterruptedException`,所以程序会捕获到中断信号,并终止线程。 3. 通过中断标记终止线程:`ThreadStopDemo3`展示了如何在多线程协作中,一个线程通过检查中断标记(`Thread.currentThread().isInterrupted()`)来感知并响应中断。这是一种更灵活且安全的方法,因为它允许线程自行决定何时响应中断,而不是在任何时刻都可能被强行终止。 4. JMM模型与`synchronized`关键字:这部分内容虽然没有直接给出,但可以推测学习中可能会涉及Java内存模型(JMM)和`synchronized`关键字的内存语义。`synchronized`用于控制多个线程对共享资源的访问,保证了在任一时刻只有一个线程能获取到特定的锁,从而避免了竞态条件。JMM定义了线程间共享变量的可见性和内存顺序,这对于理解并发编程和同步机制至关重要。 5. `synchronized`实现原理:深入理解`synchronized`关键字涉及到 monitor(监视器)的概念,以及它如何工作。在Java中,每个对象都有一个内部的monitor,当一个线程获取到某个对象的锁时,它就获得了对该对象及其监视器的控制。当线程释放锁时,其他等待该锁的线程才能继续执行。 总结来说,这一章节着重于Java并发编程的基本概念和实践,包括线程停止的替代方法、内存模型中的`synchronized`和JMM模型的理解,这些都是编写多线程应用程序的基础。理解这些内容对于编写健壮且高效的并发代码至关重要。