线程什么意思(线程基本用法)线程(Thread)基本 *** 清单:
创建线程有三种方式:
通过继承 Thread 类创建线程的步骤:
实现 Runnable 接口优于继承 Thread 类,因为:
通过实现 Runnable 接口创建线程的步骤:
继承 Thread 类 和 实现 Callable 接口这两种创建线程的方式都没有返回值。所以,线程执行完后,无法得到执行结果。但如果期望得到执行结果该怎么做?
为了解决这个问题,Java 1.5 后,提供了 Callable 接口和 Future 接口,通过它们,可以在线程执行结束后,返回执行结果。
通过实现 Callable 接口创建线程的步骤:
使用 Thread.sleep *** 可以使得当前正在执行的线程进入休眠状态。
使用 Thread.sleep 需要向其传入一个整数值,这个值表示线程将要休眠的毫秒数。
Thread.sleep *** 可能会抛出 InterruptedException,因为异常不能跨线程传播回 main 中,因此必须在本地进行处理。线程中抛出的其它异常也同样需要在本地进行处理。
Thread.yield *** 的调用声明了当前线程已经完成了生命周期中最重要的部分,可以切换给其它线程来执行 。
该 *** 只是对线程调度器的一个建议,而且也只是建议具有相同优先级的其它线程可以运行。
Thread 中的 stop *** 有缺陷,已废弃。
使用 Thread.stop 停止线程会导致它解锁所有已锁定的监视器(由于未经检查的 ThreadDeath 异常会在堆栈中传播,这是自然的结果)。 如果先前由这些监视器保护的任何对象处于不一致状态,则损坏的对象将对其他线程可见,从而可能导致任意行为。Thread.stop 的许多用法应由仅修改某些变量以指示目标线程应停止运行的代码代替。 目标线程应定期检查此变量,如果该变量指示要停止运行,则应按有序方式从其运行 *** 返回。如果目标线程等待很长时间(例如,在条件变量上),则应使用中断 *** 来中断等待。
当一个线程运行时,另一个线程可以直接通过 interrupt *** 中断其运行状态。
如果一个线程的 run *** 执行一个无限循环,并且没有执行 sleep 等会抛出 InterruptedException 的操作,那么调用线程的 interrupt *** 就无法使线程提前结束。
但是调用 interrupt *** 会设置线程的中断标记,此时调用 interrupted *** 会返回 true。因此可以在循环体中使用 interrupted *** 来判断线程是否处于中断状态,从而提前结束线程。
安全地终止线程有两种 *** :
示例:使用 volatile 标志位控制线程终止
示例:使用 interrupt *** 和 Thread.interrupted *** 配合使用来控制线程终止
什么是守护线程?
为什么需要守护线程?
如何使用守护线程?
Thread 类的 sleep 和 yield *** 将处理 Running 状态的线程。
所以在其他处于非 Running 状态的线程上执行这两个 *** 是没有意义的。这就是为什么这些 *** 是静态的。它们可以在当前正在执行的线程中工作,并避免程序员错误的认为可以在其他非运行线程调用这些 *** 。
即使设置了线程的优先级,也无法保证高优先级的线程一定先执行。
原因在于线程优先级依赖于操作系统的支持,然而,不同的操作系统支持的线程优先级并不相同,不能很好的和 Java 中线程优先级一一对应。
本皮是一个有着5年工作经验的程序员,关于Java,自己有做材料的整合,一个完整学习Java的路线,学习材料和工具。需要的伙伴可以私信我,发送“交流”后就可免费获取。对于学习Java有任何问题(学习 *** ,学习效率,如何就业)都可以问我。希望你也能凭自己的努力,成为下一个优秀的程序员
发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 博主已将以下这些面试题整理成了一个J...
发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 博主已将以下这些面试题整理成了一个J...