Java 多个线程交替执行

Java面试题:多个线程交替执行

文章目录

  • Java面试题:多个线程交替执行
    • 前言
    • 项目环境
    • 1.Condition 版本
    • 2.公平锁
    • 3.如何解决线程打印顺序的问题

前言

最近在一些技术群里看到有很多小伙伴面试的时候碰到这个多线程的笔试题,实现两个线程交替打印,或者是实现多个线程的交替打印这种类似的题目。

本文提供三种解题思路和实现

  • 利用 Condition 类实现
  • 利用公平锁实现
  • 超过 2 个线程,利用队列来保证线程执行的顺序

项目环境

  • jdk 1.8
  • github 地址:https://github.com/huajiexiewenfeng/java-concurrent
    • 本章模块:interview

1.Condition 版本

  • 缺陷是超过 2 个线程之后无法保证执行的顺序

    public class ThreadAlternateConditionDemo {

    public static void main(String[] args) {
        Lock lock = new ReentrantLock();// 默认非公平
        Condition condition = lock.newCondition();
        ConditionThread conditionThread = new ConditionThread(lock, condition, 100);
        new Thread(conditionThread, "Thread-A").start();
        new Thread(conditionThread, "Thread-B").start();
        new Thread(conditionThread, "Thread-C").start();
        new Thread(conditionThread, "Thread-D").start();
    }
    
    static class ConditionThread implements Runnable {
    
        Lock lock;
    
        Condition cond

你可能感兴趣的:(java,jvm,面试)