美文网首页
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