美文网首页
假设有10个线程,如何让他们顺序执行?

假设有10个线程,如何让他们顺序执行?

作者: 张云飞Vir | 来源:发表于2021-07-16 15:21 被阅读0次

1. 背景

假设:有10个线程,如何让他们顺序执行?

解答:可以使用 多线程配合 "公平锁" 来实现。
涉及到 Thread, ReentrantLock

2.知识

公平锁就是保障了多线程下各线程获取锁的顺序,先到的线程优先获取锁,而非公平锁则无法提供这个保障。

某个线程尝试获取锁时,先会尝试 CAS ,失败后会把自己放入 这个是锁的等待队列,这时队列里多个等待锁的顺序如果是有序的,就是公平锁,如果无序则是非公平锁。

Java 中的 ReentrantLock 构造函数可以默认的锁策略是非公平锁。

ReentrantLock reentrantLock = new ReentrantLock(); // 默认 "不公平锁"
boolean isFair = true; // 是否 公平锁
ReentrantLock reentrantLock2 = new ReentrantLock(isFair); // 这个构造方法可以产出 "公平锁"

3. 示例

上代码:

public class Main {

    static class MyService {
        ReentrantLock reentrantLock = new ReentrantLock(true);

        void doSome() {
            reentrantLock.lock();
            System.out.println(String.format("\t\t\t\t 线程[%s] 执行 ...", Thread.currentThread().getName()));
            reentrantLock.unlock();
        }
    }

    public static void main(String[] args) {
        final MyService myService = new MyService();
        Runnable runnable = () -> {
            System.out.println(String.format("线程[%s] 进入 ...", Thread.currentThread().getName()));
            myService.doSome();
        };

        Thread[] threadArray = new Thread[10];
        for (int i = 0; i < 10; i++) {
            Thread thread = new Thread(runnable);
            thread.setName("Thread_" + i);
            threadArray[i] = thread;
        }

        Arrays.stream(threadArray).forEach(Thread::start);


        try {
            Thread.sleep(20 * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

输出的结果:

image.png

END

相关文章

  • 假设有10个线程,如何让他们顺序执行?

    1. 背景 假设:有10个线程,如何让他们顺序执行? 解答:可以使用 多线程配合 "公平锁" 来实现。涉及到 Th...

  • Java面试-多线程问题整理

    1.如何让线程顺序执行: 1.thread.join 方法,可以让主线程等待子线程执行完之后,再执行。 jion方...

  • 如何让线程顺序执行

    需求 让多个线程按照顺序执行 有人说,直接按照顺序调用start方法不就好了吗,来看看案例 效果如下 多次运行,会...

  • 如何让多个线程顺序执行

    先说一下为什么会有这样的要求,如果是简单的要求按顺序执行代码,直接一行行写下来就行了。但是接口调用我们一般都放在工...

  • JAVA并发如何让线程顺序执行

    方法一 利用Lock锁中的Condition等待/唤醒机制,让三个线程顺序打印1 ~ N个数值。 大致流程 方法二...

  • python——多线程

    多线程-threading 子类完成创建多线程 线程的执行顺序也是主线程和各个子线程随机执行,顺序不确定 线程对全...

  • 并发

    保证多线程的顺序执行 方式1:通过join方法保证多线程的顺序join作用:让主线程等待子线程结束后才能继续运行 ...

  • ABC三个线程如何保证顺序执行

    介绍 最近看看多线程练习题,练习下多线程,这道题:ABC三个线程如何保证顺序执行。三个线程同时启动,然后按照顺序执...

  • 多线程知识点更新

    控制线程间的执行顺序 CyclicBarrier类 让一组线程等待至某种状态后全部执行关于CyclicBarrie...

  • 面试官:Java中线程是按什么顺序执行的?

    摘要:Java中多线程并发的执行顺序历来是面试中的重点,掌握Java中线程的执行顺序不仅能够在面试中让你脱颖而出,...

网友评论

      本文标题:假设有10个线程,如何让他们顺序执行?

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