线程: 启动和终止

创建线程

Java 中创建有两种方法:继承 Thread 类、实现 Runnable 接口,在程序开发中只要是多线程,肯定永远以实现 Runnable 接口为主。

实现 Runnable 接口相比继承 Thread 类有如下优势:

  • 可以避免由于 Java 的单继承特性而带来的局限;
  • 增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的;
  • 适合多个相同程序代码的线程区处理同一资源的情况。

继承Thread类相当于是多个线程分别完成自己的任务;实现Runable接口,相当于是多个线程共同完成一个任务。

启动线程

线程对象在初始化完成之后,调用start()方法就可以启动这个线程。

线程start()方法的含义是:当前线程(即parent线程)同步告知Java虚拟机,只要线程规划器空闲,应立即启动调用start()方法的线程。

理解中断Interrupted

中断可以理解为线程的一个标识位属性。它表示一个运行中的线程是否被其他线程进行了中断操作。

Java中断机制是一种协作机制,也就是说通过中断并不能直接终止另一个线程,而需要被中断的线程自己处理中断。

  • 其他线程通过调用该线程的interrupt()方法对其进行中断操作。
  • 线程通过检查自身是否被中断来进行响应,线程通过方法isInterrupted()来进行判断是否被中断。
  • 静态方法Thread.interrupted()对当前线程的中断标识位进行复位。

过期的suspend()、resume()和stop()

不建议使用的原因主要有:以suspend()为例,在调用后,线程不会释放已经占有的资源(比如锁),而是占有着资源进入睡眠状态,这样容易引发死锁问题。

安全地终止

中断操作时一种简便的线程交互方式,可以用来取消或停止任务。

除了中断以外,还可以利用一个boolean变量来控制是否需要停止任务并终止该线程。