java 三个线程交替执行

Java 多个线程交替执行 Java 多个线程交替执行 - 小白入门教程 阅读详情


package cn.itcast.gz;
 
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
 * 第一个线程循环5次,接着第二个线程循环10次,
 * 接着第三个线程循环15次,然后又到第一个线程循环5次
 * 如此往复执行50次
 *
 */
public class Interview3 {
 
    public static void main(String[] args) {
 
        ThreadTest3 threadTest3 = new ThreadTest3();
 
        Thread t1 = new Thread(threadTest3);
        Thread t2 = new Thread(threadTest3);
        Thread t3 = new Thread(threadTest3);
 
         t1.start();
         t2.start();
         t3.start();
 
    }  
}
 
class ThreadTest3 implements Runnable
{
 
    private Lock lock = new ReentrantLock();
    private int j = 0;
    private int k = 1;
 
    Condition con1 = lock.newCondition();
    Condition con2 = lock.newCondition();
    Condition con3 = lock.newCondition();
 
    public void father()
    {
        lock.lock();
 
        try {          
            while(j!=0)
            con1.await();
            for(int i = 1;i<=5;i++)
            {
                System.out.println("Thread A..."+i);
            }
            j=(j+1)%3;
            con2.signal();
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally
        {
            lock.unlock();
        }
    }
 
    public void son()
    {
        lock.lock();
        try {
            while(j!=1)
            con2.await();
            for(int i = 1;i<=10;i++)
            {
                System.out.println("Thread B..."+i);
            }
            j=(j+1)%3;
            con3.signal();
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally
        {
            lock.unlock();
        }
    }
 
    public void granson()
    {
        lock.lock();
        try {
            while(j!=2)
            con3.await();
            for(int i = 1;i<=15;i++)
            {
                System.out.println("Thread C..."+i);
            }
            j=(j+1)%3;
            con1.signal();
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally
        {
            lock.unlock();
        }
    }
 
    @Override
    public void run() {
 
        for(int i = 0;i<3;i++)
        {
            if(k==1)
            {
               father();
               k=(k+1)%3;
            }
            else if(k==2)
             {
               son();
               k=(k+1)%3;
             }
            else
            {
              granson();
              k=(k+1)%3;
            }
        }
 
    /*  father();
        son();
        granson();*/
    }
}


【java多线程】代码实现ABC三个线程,依次交替执行,ReentrantLock方式 ABC三个线程,依次交替执行 package com.test.lock.abc; import java.util.concurrent.CountDownLatch; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; /** * 三个线程,按顺序打印ABC */ public class App { public static final Reent 阅读详情

相关推荐

JAVA线程高级-线程按序交替执行

java多线程按需交替执行,java新特性。

Java三个线程轮流搞事以及定时任务线程池

Java三个线程轮流搞事以及定时任务线程池三个线程轮流打印ABC三个线程轮流输出从1-100Java核心技术卷I上的内容任务线程池的一个使用示例 三个线程轮流打印ABC package tacos.thread; import org.junit.Test; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.Condit

qq_36090641的博客 451

PCB数据集

整理了一部分PCB数据集

m0_57996537的博客 3867

3个线程交替执行

【代码】3个线程交替执行。

jinchen_boke的博客 299

flink定位反压节点

在 Apache Flink 中定位反压(Backpressure)节点需要结合监控工具和作业行为分析。

2301_80954266的博客 1046

一种基于OpenPose和DNN的跌倒检测软件系统(中文&英文)

学习并实现一种跌倒检测模型,此模型基于OpenPose实现逐帧人体姿态检测,使用DNN识别人体动作。检测方式有在线与离线两种,本文主要测试了离线模式,测试效果较好。

Tongzhou_Li的博客 2643

线程状态

初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得C...

SeaWaveCwt的博客 467

全本地AI代理实战:零数据外泄的本地化Agent工作流搭建

全本地AI代理是一种将大语言模型推理、长期记忆与工具调用完全运行于用户本地设备的智能体架构,其核心原理在于通过进程隔离与标准化协议实现模型层、记忆层和工具层的解耦协同。相比依赖云端API的传统方案,它在数据主权、响应确定性与环境复现性上具备不可替代的技术价值。典型应用场景包括法务合规文档处理、离线工业现场辅助决策、以及高敏感度企业知识管理。本文聚焦Qwen2+Ollama+SurrealDB+Agno技术栈,详解如何构建可落地的全本地AI代理系统,覆盖从硬件适配、向量记忆建模到多模态插件协同的完整链路。

weixin_34194964的博客 650

三个线程循环切换

package com.thread; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class ThreadTest3 { public static vo...

phantomes的专栏 151

AutoDL跑yolo

由于博主在AutoDL的JupyterLab的终端直接上传ZIp文件要么老是再上传中被中断,要么就是上传后使用unzip指令解压显示“找不到”,作为纯小白的我实在太难了!这个文件列出了一个 Python 项目所需的所有依赖包及其精确的版本号。这个文件是 Python 项目中常见的一种方式,用于确保项目在不同环境中都能以相同的依赖包配置运行。3.进入JupyterLab,在文件夹目录中找到上传的文件夹,右键点击“复制路径”。然后在终端中输入以下指令进行切换到该文件夹路径。9.安装成功后开始输入指令开跑!

m0_73804659的博客 1205

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

输入电压采集上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, 由于二极 管的正向导通特性, 用户反接电源时亦不会烧坏后级电路。图中 R8、R9 组成分压电路, 由单片机 AD 采集 IO 口 P14 采集 AD 值, 并由计算公式电压 =133300(AD/4096)mV;

Naiva的博客 1994

java 之 三个线程交替执行任务

import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * Condition实现线程间通信 * @author ETHAN * */ public class Thre

ETHAN IN IT 5481

【PCL点云配准】位姿估计

本文介绍了PCL(Point Cloud Library)中TransformationEstimation模块的核心算法原理和实现方法。该模块通过多种子类(如SVD、LM、双四元数等)提供点云配准功能,支持2D/3D刚性变换估计。主要内容包括:1)各类变换估计算法的数学原理和实现细节;2)点对点/点对面两种误差度量方法;3)线性闭式解和非线性迭代两种求解方式;4)变换验证机制;5)基于三点法的完整代码示例。该模块广泛应用于SLAM、三维重建等领域,为点云配准提供了高效可靠的解决方案。

yijiujiusan的博客 241

java线程交替执行_java 三个线程交替执行

[java]代码库package cn.itcast.gz;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/*** 第一个线程循环5次,接着第二个线程循环10次,* 接着第三个线程循环...

weixin_39847244的博客 758

S7-1200与ABB机器人进行SOCKET通信的具体方法示例

S7-1200与ABB机器人进行SOCKET通信的具体方法示例

Robot_PLC_HMI_Automation 3292

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java线程的交替执行与谦让执行

1.两个线程的交替执行 package myThread; public class alternateThread { Object o=new Object(); Boolean f=true; class Thread1 extends Thread{ @Override public void run() { ...

qq_37001101的博客 607

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

使用Java实现三个线程交替打印0-74

使用Java实现三个线程交替打印0-74 题目分析 三个线程交替打印,即3个线程是按顺序执行的。一个线程执行完之后,唤醒下一个线程,然后阻塞,等待被该线程的上一个线程唤醒。执行的顺序是一个环装的队列 0->1->2->0 ....->0->1->2 实现思路 由于三个线程一次只能有一个在打印数字,所以需要用一个锁来进行同步。但是在打印时要保证顺序...

weixin_30385925的博客 536

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java面试题:多线程交替打印数字

这个Java程序使用了三个线程(t1t2t3)和三个信号量(firstsecondthird)来实现交替打印数字1、2、3的功能。每个线程负责打印一个数字,并通过信号量来控制线程的执行顺序。通过使用信号量,我们可以精确控制多个线程的执行顺序,实现复杂的线程同步逻辑。这个例子展示了如何使用信号量来实现三个线程的交替执行。

dhrmt的博客 824

Condition线程通信,交替执行

一、线程通信,交替执行 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。 *如:ABCABCABC…… 依次递归 使用锁加上condition来实现 congdition接口下的基本方法 await() //进入等待 await(long, TimeUnit)//等待时间 awaitN...

风子的博客 412

java多线程,三个线程轮流执行顺序打印ABC,循环5次。使用三个Condition实现。

package com.zhong.thread; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; /** * 三个线程依次输出A,B,C,循环5次。 * 输出结果: * ABC * ABC * ABC * ABC * ABC */ public class SequencePrintDemo { private static volat.

javaZhong的博客 2502

三个多线程的交替打印

1 package cn.thread; 2 3 public class ManyThread2 { 4 public static void main(String[] args) { 5 MyRunnable1 runnable1 = new MyRunnable1(); 6 MyRunnable2...

A458545418的博客 208

Java中多个线程交替循环执行

有些时候面试官经常会问,两个线程怎么交替执行呀,如果是三个线程,又怎么交替执行呀,这种问题一般人还真不一定能回答上来。多线程这块如果理解的不好,学起来是很吃力的,更别说面试了。下面我们就来剖析一下怎么实现多个线程顺序输出。 两个线程循环交替打印 //首先我们来看一种比较简单的方式 public class ThreadCq { public static v...

weixin_30819085的博客 1231

多线程交替打印ABC

利用Condition来实现多线程交替打印ABC 使用重入锁 ReentrantLock先来获得lock; lock.newCondition对象,Condition 可以用来指定队列,唤醒指定队列中的线程; 这样在多线程环境下会有更高的效率; import java.util.concurrent.locks.Condition; import java.util.concurrent.l...

unherit的博客 458

两个线程交替打印数据

描述: 子线程循环10次,主线程循环100,接着有回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 下面的是我写的: public class Solution { public static void main(String[] args) { Bussiness bussiness = new Bussiness(); /...

有料,有味,很重要 960

三个线程交替循环打印

【代码】三个线程交替循环打印。

weixin_44836762的博客 577

线程通信练习(三个线程交替)

首先先介绍下我们使用的两个1.5并发库的对象: Lock和Condition:前者是对synchronized的替代,condition是对锁对象的替代,他可以实现一个Lock对应多个Condition; 这个改进使得线程间的通信更加安全可靠,解决了线程都在等待和唤醒所有线程的问题; 请看一个三个线程交替执行的例子;    package cn.itcast.concurrent; p

李荣强 469
上一篇: HibernateException: No Hibernate Session bound to thread
下一篇: java并发编程--一道经典多线程题的2种解法
It_BeeCoder
博客等级 码龄10年 967粉丝 238原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值