Lucky丶钉钉 2019-08-11 20:26 采纳率: 71.4%
浏览 385
已采纳

Java多线程公平锁问题

Java多线程中Reentrant类的带参构造器,创建一个公平锁,按道理说线程应该是先进先出的原则,为什么打印会是乱序。求解答:

package cn.zxyy.multiThread.chap4.ReentrantLock.Fair_noFair_test;

import java.util.concurrent.locks.ReentrantLock;

public class Service {
    private ReentrantLock lock;

    public Service(boolean isFair){
        lock = new ReentrantLock(isFair);
    }

    public void serviceMethod(){
        try{
            lock.lock();
            System.out.println("ThreadName = " +Thread.currentThread().getName()+"获得锁定");
        }finally {
            lock.unlock();
        }
    }
}
package cn.zxyy.multiThread.chap4.ReentrantLock.Fair_noFair_test;

public class RunFair {
    public static void main(String[] args) {
        final Service service = new Service(true);
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("♠线程"+Thread.currentThread().getName() +"运行了");
                service.serviceMethod();
            }
        };
        Thread[] threads = new Thread[10];
        for (int i = 0; i < 10; i++) {
            threads[i] = new Thread(runnable);
        }
        for (int i = 0; i < 10; i++) {
            threads[i].start();
        }
    }
}

图片说明

使用的是IntellijIdea2017会和这个工具的设置有关系吗?

  • 写回答

5条回答 默认 最新

  • asafer 2019-08-12 16:48
    关注

    其实楼主搞混了两个概念,一个是线程创建的顺序和公平锁的概念搞混了,先说线程创建的顺序,我们现在用的都是多核机器,所以楼主的创建
    线程的方法是无法保证线程创建顺序按照1 2,3,4,5,6来的,他是由cpu自己调度的,及时是单核机子,也会使用时间片轮转调度,所以楼主的创建
    线程方法无法保证创建线程,第二个问题是公平锁的问题,当线程创建后才去请求锁,公平锁可以保证请求锁的顺序,在实际生产过程中创建顺序
    没有太大的意义的,更多的是关注线程的执行顺序,线程执行顺序可以用join,countDownLatch,syclicBarrier,lockSupport ,阻塞等方法保证执行顺

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 根据以下文字信息,做EA模型图
  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥60 关机时蓝屏并显示KMODE_EXCEPTION_NOT_HANDLED,怎么修?
  • ¥66 如何制作支付宝扫码跳转到发红包界面