美文网首页
2018-10-24

2018-10-24

作者: 留夕_3826 | 来源:发表于2018-10-29 18:44 被阅读0次

You may be disappointed if you fail, but you are doomed if you don't try.
如果你失败了你也许会失望,但如果你不尝试,你就完了。

  • 线程的存在是为了并行

    • jvm虚拟机其实运行了许多线程
  • 并发和并行

    • 其实外在表象是相同的,并发是一起走,并行是轮转
  • 临界区 阻塞 非阻塞

  • 死锁是一个静态的问题,不会再继续下去。不会再占用更多cpu

    • 抢占资源不释放
    • 等待共享资源
  • 饥饿 类似于电梯遇人。

  • 活锁

    • 是一个动态的问题,线程不断释放、获取资源。一直在尝试获取资源
    • 原子操作一直等待
  • 无障碍

    • 宽进严出 如果冲突必须要回滚数据,所有线程都会进入临界区
    • 会不断的重试
    • 所有的线程相当于拿去当前的快照,会一直尝试,知道拿到一个有效的快照
  • 无锁

    • 无锁必须要是无障碍的,保证有一个线程可以正常执行,不至于所有的线程都一直在竞争资源、快照
  • 无等待

    • 无锁
    • 要求所有临界区线程都可以在有限步完成,而且要求都在有限步当中完成操作
    • 无饥饿
    • 举例
    • 比如说读写、读是无等待的,但是写会影响读,为了不影响读,就拷贝一份副本去修改,所以修改过程不会影响读,这样读线程仍然是无等待的
    • 写也是无等待的,他们不用相互同步。唯一有问题的是覆盖回原始数据的时候,只是更改引用/指针去替换,但是他很快。
  • 阻塞

    • 这个线程操作数据,必然会影响其他线程。

  • Thread实现了runnable

  • 如何优雅的终止一个线程 interupt()

  • 为何线程的操作都需要抛出异常

    • 如果被中断的时候可以立即作出响应,比如tread.sleep()
  • image.png
  • 其实是java jvm层面的去调用notifyAll

    • 唤醒等待在当前线程上的所有线程
    • 当然 wait notifyAll 不要用在自己的线程实例上线
      • 换句话说,就是不一定能达到预期的目的

相关文章

网友评论

      本文标题:2018-10-24

      本文链接:https://www.haomeiwen.com/subject/waqftqtx.html