创建线程
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变量来控制是否需要停止任务并终止该线程。