为了账号安全,请及时绑定邮箱和手机立即绑定
  • 广为流传的错误停止线程的方法:interrupt() interrupt()--初衷并不是用于停止线程 在调用sleep()或者join()的时候,一旦其他线程调用interrupt(),它将会收到一个异常,这些被阻塞的线程因为某些原因需要被唤醒,比如外部发生了中断而需要响应,这时就采用抛出异常的方式来使其作出响应。总而言之,interrupt()方法并不能正确地停止进程 一个线程在阻塞状态下(例如sleep),此时interrupt的话,将会产生两个结果: 1、进程的interrupt状态被清除(cleard)而非被设置(set)。 2、sleep方法会抛出异常。
    查看全部
  • 的我非常
    查看全部
  • 斥的实现:synchronized(lockObj);java的语法保证的同一时间,只有一个线程获得lockObj 同步:wait(),notify(),notifyall(),都是属于object类,并不是thread类 notify()唤醒wait set中的一条线程,而notifyall()唤醒所有线程 同步是两个线程之间的一种交互的操作(一个线程发出消息另外一个线程响应)。
    查看全部
  • 广为流传的错误停止线程的方法:interrupt() interrupt()--初衷并不是用于停止线程 在调用sleep()或者join()的时候,一旦其他线程调用interrupt(),它将会收到一个异常,这些被阻塞的线程因为某些原因需要被唤醒,比如外部发生了中断而需要响应,这时就采用抛出异常的方式来使其作出响应。总而言之,interrupt()方法并不能正确地停止进程
    查看全部
  • 线程初体验:Thread类,,与run()方法
    查看全部
  • 在线程中,停止线程的方法:设置旗标 使用volatile 定义boolean running=true,通过设置标志变量running,来结束线程。 如本文:volatile boolean keepRunning=true; 这样做的好处是:使得线程有机会使得一个完整的业务步骤被完整地执行,在执行完业务步骤后有充分的时间去做代码的清理工作,使得线程代码在实际中更安全
    查看全部
  • Java中如何停止线程————使用退出标志
    查看全部
  • Java5并发编程工具
    查看全部
    1 采集 收起 来源:总结及展望

    2015-06-30

  • 多线程编程常用的交互模型
    查看全部
    1 采集 收起 来源:总结及展望

    2015-06-30

  • 线程安全性
    查看全部
    1 采集 收起 来源:总结及展望

    2015-06-30

  • 如何扩展Java
    查看全部
    1 采集 收起 来源:总结及展望

    2015-06-30

  • 如何扩展Java并发的知识
    查看全部
    1 采集 收起 来源:总结及展望

    2015-06-30

  • 扩展建议: Java Memory Mode JMM描述了java线程如何通过内存进行交互 happens-before synchronized,volatile & final Lock 和 Condition对象 java锁机制和等待条件的高层实现 java.util.concurrent.locks 线程的安全性: 原子性和可见性 java.util.concurrent.atomic synchronized & volatile DeadLocks 多线程常用的交互模型: Producer-Consumer模型 Read-Write Lock模型 Future模型 Worker Thread 模型 java5引入的并发编程工具: java.util.concurrent 线程池ExecutorService Callable & Future BlockingQueue
    查看全部
    1 采集 收起 来源:总结及展望

    2018-03-22

  • interrupt()方法可以使中断方法发生变化
    查看全部
  • 如何正确停止线程 一、错误一:stop()方法 1、not stop:stop()方法会使线程戛然而止 2、使程序突然中止,无法完成完整的业务步骤,也无法进行清理工作 二、错误二:interrupt()方法 1、interrupt()方法只能设置interrupt标志位(且在线程阻塞情况下,标志位会被清除,更无法设置中断标志位),无法停止线程 三、正确方法:设置退出标志 1、使用退出标志位来停止while循环 2、完成最后一次业务后跳出while循环后,之后进行一些清理工作 在异常抛出之前,线程刚好执行了Thread.sleep(1000); 然后在主线程main中就是休眠的这一秒中继续执行了thread.interrupt(); 因为thread是在休眠之中的,所以在 try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } 中抛出了异常,也就是说这时候的因为sleep中采用的interrupt()中断方法已经被处理了,就是理解为回归正常, 所以以后的isInterrupt()方法判断的都是没有中断的了,就是返回false。因为它再次循环就是在执行了异常之后,所以此时isInterrupt()都返回false interrupt()方法初衷并不是用来停止线程(静态方法,返回布尔值)
    查看全部

举报

0/150
提交
取消
课程须知
本课程的学习,需要小伙伴们具有面向对象基础知识及 Java 语言基础。如果您是新手,建议先移步 《Java入门第一季》和《Java入门第二季》
老师告诉你能学到什么?
1、Java 中如何使用线程 2、什么是争用条件 3、线程如何交互

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!