您的浏览器不支持html5的canvas

如何优雅的结束一个线程

如何优雅的结束一个线程

  1. stop:无论过程走到那一步都会结束,太暴力而且已过时,容易产生数据不一致问题!--不优雅
  2. volatile:保证线程之间的可见性,用它修饰一个bollean类型的变量,但使用过程中无法精确具体的数据条件,再线程不依赖中间状态时可使用。--较优雅
  3. interrup:其中(interrup设置标志位,Isinterrup查询标志位,interrupe()重置标志位),这些方法不会干扰到线程,只是设置一个标志位。线程之间可根据具体标志位的标志进行业务中断。使用new ReentrantLock(),lock.lockInterruptibly() 中断线程并抛出异常。--优雅

线程状态注解:

  • new 线程刚刚创建,还没有启动
  • Runnable 线程运行,刚创建的线程调用start()方法进入Runnable状态,其中又细分为两个状态
    1. running 正在cpu中运行,在线程被挂起或者调用yeid()方法使线程进入ready状态
    2. ready 就绪状态,在cpu的等待队列中,在线程被调度器执行时进入running状态
  • Waiting 等待被唤醒
  • Timed Waiting 隔一段时间后自动唤醒
  • Blocked 被阻塞,等待线程锁
  • Terminated 结束

其中,执行某些方法进入状态说明:

  • 进入timedWaiting状态
    Thread.sellp(time)
    object.wait(time)
    Thread.join(time)
    Locksupport.parkNanos()
    Locksupport.until()
  • 进入waiting状态
    object.wait();
    Thread.join();
    Locksupport.park();
  • 进入Blocked状态
    synchorized(object) 等待进入同步代码块的锁
  • 进入Terminated
    线程抛出一个异常会进入结束状态
    正常运行完且结束
    优雅的结束一个线程
posted @ 2021-09-08 09:36  呵呵哒灬荒唐  阅读(107)  评论(0)    收藏  举报