一文弄懂:三个线程交替打印1-100或者ABC

本文详细讲解了如何利用synchronized和Lock锁解决多线程交替执行的问题,提供了两种实现方案,包括synchronized结合wait、notify的策略和Lock锁的使用,适用于面试和实际工作中的多线程场景。
摘要由CSDN通过智能技术生成

前言:多线程问题是平时工作中的常见问题,也是面试的常考问题.如果你也有遇到多线程交替执行任务的需求,不妨看看这篇文章

一、题目描述

建立三个线程A、B、C,A线程打印字符"A", B线程打印字符“B”,C线程打印字符"C" ,三个线程交替打印100次。

分析: 该问题属于一个多线程的系统设计问题, 网上的方案很多,但是要做到面试官眼睛一亮,还是需要下些功夫。

二、synchronized + Notify实现

统计使用synchronized同步代码块和wait、notify的方法控制三个线程的执行次序。

思路 : 三个线程抢占一个Object对象锁,每次抢占锁之后,检测当前的执行顺序是否与期望顺序匹配,不匹配则是否锁,重复抢锁过程。

public class SyncTest1 {
    public static final int max = 30;
    public static Object lock = new Object();
    public static int count = 1;

    public static void main(String[] args) throws InterruptedException {
        long curTime = System.currentTimeMillis();
        MyTask task1 = new MyTask(0, "A");
        MyTask task2 = new MyTask(1, "B");
        MyTask task3 = new MyTask(2, "C");
        Threa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值