zoukankan      html  css  js  c++  java
  • java多线程——饥饿和公平

    一、概念

    饥饿:如果一个线程因为 CPU 时间全部被其他线程抢走而得不到 CPU 运行时间,这种状态被称之为“饥饿”;

    二、饥饿原因

    1. 高优先级线程吞噬所有的低优先级线程的 CPU 时间。
    2. 线程被永久堵塞在一个等待进入同步块的状态,因为其他线程总是能在它之前持续地对该同步块进行访问。
    3. 线程在等待一个本身(在其上调用 wait())也处于永久等待完成的对象,因为其他线程总是被持续地获得唤醒。

    三、公平性

          1、用锁代替同步代码块

    public class Synchronizer{
        Lock lock = new Lock();
        public void doSynchronized() throws InterruptedException{
            this.lock.lock();
            //critical section, do a lot of work which takes a long time
            this.lock.unlock();
        }
    }

    2、公平锁


    四、java中的锁

    1、锁的可重入性
    如果一个线程已经拥有了一个管程对象上的锁,那么它就有权访问被这个管程对象同步的所有代码块。这就是可重入。

    2、锁的公平性
    在finally中调用unlock()

    3、读写锁(
    java.util.concurrent.locks.ReadWriteLock)

    假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。
    在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。
    但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读或写。



  • 相关阅读:
    用javascript进行拖拽3(转)
    用javascript进行拖拽4(转)
    设计模式:设计自己的MVC框架(转)
    用javascript进行拖拽1(转)
    .NET Framework
    微软软件开发技术二十年回顾
    .NET Framework是什么
    .net中语音识别和语音合成入门篇
    用javascript进行拖拽5(转)
    .net3.0
  • 原文地址:https://www.cnblogs.com/lwcoding/p/6678292.html
Copyright © 2011-2022 走看看