线程交替输出

多线程轮流交替执行三种实现方法 第一种方法:采用公平锁实现 思路及其简单: A线程拿到锁,执行代码 B线程拿到锁,执行代码 A线程拿到锁,执行代码 ...... public class FairLockDemo { public static void main(String[] args) { Runnable target = new Runnable(){ int i = 10; // 利用公平锁 private R 阅读详情
启动三个线程打印递增数字,线程1先打印1,2,3,4,5 然后是线程2打印6,7,8,9,10然后是线程3打印出11,12,13,14,15.接着在由线程1打印16,17,18,19,20.以此类推打印到75.代码如下:
package com.test;
public class MyFirstThread {
    private static CommonObj lock;
    public static void main (String[] args){
        lock =new CommonObj(0,1);
        Thread thread1 = new Thread(new  FirstRunnable(lock,1,2),"线程1");
        Thread thread2 = new Thread(new  FirstRunnable(lock,2,3),"线程2");
        Thread thread3 = new Thread(new  FirstRunnable(lock,3,1),"线程3");
        thread1.start();
        thread2.start();
        thread3.start();
    }
}

package com.test;
public class CommonObj {
    private  int n;
    private  int status;
    public CommonObj(int n ,int status){
        this.n = n;
        this.status = status;
    }
    public  int getN() {
        return n;
    }
    public  void setN(int n) {
        this.n = n;
    }
    public  int getStatus() {
        return status;
    }
    public  void setStatus(int status) {
        this.status = status;
    }
    public int addN(int no){
        return n=n+no;
    }
}


package com.test;
public class FirstRunnable implements Runnable {

    private  CommonObj lock ;
    private int currentStatuc;
    private int nextStatus;

    public  FirstRunnable (CommonObj lock,int currentStatuc,int nextStatus){
        this.lock = lock;
        this.currentStatuc = currentStatuc;
        this.nextStatus = nextStatus;
    }
    @Override
    public void run() {
        for(int j=0;j<5;j++){
            synchronized (lock){
                while(lock.getStatus()!=currentStatuc){
                    try {
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                lock.setStatus(nextStatus);
                for(int i=0;i<5;i++){
                    System.out.println(Thread.currentThread().getName()+"now Number : "+lock.addN(1)+" currentStatuc "+currentStatuc+" nextStatus "+nextStatus);
                }
                lock.notifyAll();
                System.out.println(" lock.getStatus "+lock.getStatus());
            }
        }
    }

    public CommonObj getLock() {
        return lock;
    }

    public void setLock(CommonObj lock) {
        this.lock = lock;
    }

    public int getNextStatus() {
        return nextStatus;
    }

    public void setNextStatus(int nextStatus) {
        this.nextStatus = nextStatus;
    }
}


 
【Java】java 实现 线程交替输出 1.概述 如何实现线程的交替输出? 2.LockSupport方案 package com.java.lock.locksupport; import org.junit.Test; import java.util.concurrent.locks.LockSupport; import static org.junit.Assert.*; /** * @author: chuanchuan.lcc * @date: 2020-12-06 17:20 * @modifiedBy: chua. 阅读详情

相关推荐

两个线程交替执行

一个线程打印123,另一个打印456,最终结果是打印123 456 123 45

两个线程交替执行的几种方式

有个常见的面试题是这样,有2个字符串,一个字符串是1234567,另一个字符串是ABCDEFG,然后需要按1A2B3C4D5E6F7G或者A1B2C3D45E6F7G这种输出,就需要用到多线程交替执行来实现。本文列举了5种实现方式。

李秀才的博客 2946

VCSA 6.7证书过期别慌!手把手教你通过SSH修改系统时间恢复登录(附STS证书修复脚本)

本文详细介绍了VCSA 6.7证书过期的应急处理方案,包括通过SSH修改系统时间临时恢复登录、全面更新证书体系以及专项修复STS证书的实战步骤。文章还提供了后期验证和系统加固的建议,帮助运维人员有效应对证书过期问题,确保虚拟化平台的稳定运行。

weixin_31292729的博客 415

线程依次交替执行解决办法

在面试题中,我们经常会遇到这样的题目,线程依次交替执行,比如有三个线程,第一个线程打印1-2-3,第二个线程接着打印4-5-6,第三个线程打印7-8-9,再更换到线程一运行打印10-11-12,依此类推。或者只有两个线程,他们直接交替执行。 我们知道,默认情况下,多线程运行,资源是共享的,也就是说他们是竞争关系,谁得到cpu资源,谁就运行,其他线程等待,当运行完毕,接下来由谁运行,是不确定的,有...

feinifi的博客 1904

ArcGIS新手必看:5分钟搞定等高线转DEM栅格(附完整操作截图)

本文详细介绍了在ArcGIS中将等高线转换为DEM栅格的完整流程,包括CAD数据预处理、TIN转栅格和直接插值法两种核心方法,以及常见问题排查与优化技巧。通过实战案例和操作截图,帮助GIS新手快速掌握这一测绘数据处理的核心技能,提升地形分析和三维可视化效率。

dapp9builder的博客 286

保姆级教程:在ESXi 8.0上为NVIDIA ConnectX-5/6网卡开启SR-IOV(从BIOS到虚拟机配置)

本文提供在ESXi 8.0上为NVIDIA ConnectX-5/6网卡开启SR-IOV的详细教程,涵盖BIOS设置、固件配置、驱动优化及虚拟机部署。通过SR-IOV技术,显著提升虚拟化环境中的网络性能,适用于高性能计算、AI训练等场景。

weixin_26934905的博客 455

java线程交替执行的实现

这是个老生常谈的问题了,但里面涵盖的知识还是有必要好好琢磨一下子。这里简单总结了一下; 方式1:使用synchronized+wait/notify实现 @Slf4j public class ThreadDemo3 { public static void main(String[] args) { RunnableImpl runnable = new RunnableImpl(100,1); String [] threadNames = new S..

北尘 1439

DCN交换机通过boot模式升级

LIC导入成功后,输入enable进入特权模式,把网线接到通讯网口上,配置好对应interface vlan地址,在enable模式用 copy tftp://x.x.x.x/xxxxxx_nos.img nos.img待提示write ok时,reload设备完成升级。交换机启动后,在显示以下信息时输入“Ctrl+B”,一定得是手动按“Ctrl+B”进入的boot模式才能正常升级。升级交换机成功,在BootROM模式下,执行命令run或reboot,回到CLI配置界面。# 交换机通过boot模式升级。

m0_72501865的博客 947

不加锁交替执行线程的两种思路(递加取余判断、环形链表步进)(无锁,存在线程安全问题,在此仅作为一种思路分享)

不加锁交替执行线程的两种思路(递加取余判断、环形链表步进)

Dylaniou的博客 1320

软件工程案例教程·韩万江【课后习题】

!!!!

weixin_57858263的博客 6419

面试问题总结——关于YOLO系列(一)

自从刚开始接到的第一个面试开始,到现在为止,陆陆续续也参加了许多场,我像是一个刚从新手村出来的小白,一路的打怪升级刷经验,期间遇到了很多不会的,我都会及时记录总结。 到现在仍然清晰记得,第一次去面试的时候,当时被怼的多惨。。。 说明:本人是非科班出身,本科是机械电子工程专业,硕士期间的研究方向是机器学习和深度学习,因为我的简历上有关于YOLO的项目,所以我着重准备了YOLO系列的面试可能遇到的问题。 决定开启这个面试问题总结的系列,包括YOLO、C++的内容、OpenCV的内容和深度学习方面被提问的问题

boss-dog 1万+

多线程之交替输出

三个交替输出abc 利用一个标记flag:当flag=1时打印a,当flag=2时打印b,当flag=3时打印c, 并且在调用打印方法时打印完还需传递flag的下一个值,即a(1)->2,b(2)->3,c(3)->1, 这里使用wait ,notify的有条件休眠来控制程序的进行, 使用wait和notify的配套使用来进行交替打印: wait: 调用该方法会使当前线程进入阻塞状态并释放了当前的锁资源给其他线程去使用,是object类下的方法; notify:调用该方法可以唤醒单个休眠

sdshdutx的博客 724

PCL点云库入门(第1讲)——PCL库简介和安装(Win10/11+VS2019+PCL 1.12.0)

PCL,全称为,即点云库,是一个专注于2D/3D图像和点云处理的大型开源项目。该项目最初由斯坦福大学的杰出计算机视觉专家Radu博士及其团队开发和维护,经过十余年的发展,目前(2024年12月)已更新至1.14.1版本。PCL点云库集成了众多尖端的点云处理算法,这些算法不仅包括基础的滤波、特征估计、表面重建、配准、模型拟合和分割等,还涵盖了更高级的功能,如点云数据的语义理解、场景解析以及动态环境下的实时处理。这些算法能够对含有噪声的点云数据进行有效过滤,去除异常值;

qq_36812406的博客 1万+

Java多线程——交替输出

设置两个线程交替输出"1 2 1 2 1 2…" 1. 定义一个全局锁对象 为了保证两个线程使用的一定是同一个锁,我们创建一个对象作为静态属性放到一个类中, 这个对象就用来充当锁 2. 定义一个线程输出1,另外一个线程输出2 该线程输出十次 1,使用 MyLock.o 作为锁,每输出一个 1 就唤醒另一个线程,然后自己休眠并释放锁。 public class ThreadForNum1 extends Thread { @Override public void run() {

weixin_42275702的博客 8088

算法 | 基于灰狼优化算法的无人机三维路径规划方法研究(附matlab代码)

针对复杂环境下的无人机三维路径规划问题,本文提出一种基于灰狼优化算法(Grey Wolf Optimizer, GWO)的解决方案。通过模拟灰狼群体的社会等级与协作捕猎机制,结合动态参数调整策略,优化路径长度与避障性能。实验表明,相较于粒子群优化(PSO)和遗传算法(GA),GWO算法在收敛速度与路径成本上分别提升约25%和18%,且在三维城市地形中表现出更强的避障鲁棒性。本文提供完整的MATLAB代码实现,为无人机自主导航提供理论与技术支撑。

尘世冰封的专栏 287

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

两个线程交替相加输出

面试题:两个线程交替输出1-10 不知道wait()和notify()一定要在synchronized里,面试写的代码惨不忍睹 public class Main { private volatile int count = 1; /** * 输出奇数 */ public void print1() { try { ...

无bug不人生 578

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

多线程交替输出

多线程交替输出A:1 B:1A:2B:2A:3B:3 package com.chan; public class practise { private static Integer count=1; private static int choice=0; private static int limit=4; public static void ...

weixin_41576693的博客 764

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

线程交替输出0-100

线程交替输出,那么肯定是要利用线程之间的同步协调。离不开Object对象中的wait()与Notify()方法。 思路: 创建两个线程A,B,一个全局变量i记数,一个全局变量obj协调两个线程。 A输出一个数字,i++,obj.wait(),等待B执行。 B输出一个数字,i++,叫醒A(obj.notify()),再obj.wait()。 A输出一个数字,i++,叫醒B(obj.notify()),再obj.wait()。 … 重复步骤34 直到 i == 100。 思路逻辑大家应该都可以理解,需要注意

zhangxiao123qqq的博客 506

AB线程交替输出

代码 public static boolean flag=true; public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { try { synchronized(Object.class) { for (int i = 1; i <=100; i++) { if(!flag) { O

weixin_43998127的博客 454

Lock锁的通信机制,三个线程交替输出ABC

1、首先这里用到了Lock锁; 2、三个线程交替输出不同的字母,就需要三个不同的方法(输出A的方法,输出B的方法,输出C的方法); 3、并且必不可少还要用到Condition类完成线程间的通信; 4、还有一个必要的条件就是三个方法必须在同一类中,这样三个方法才能进行通信; 5、最后我们还需要一个变量进行标识轮流到哪个线程了。 第一步:创建拥有这三个方法的类 class AlternateDemo{...

L_Mcode的博客 751

Java使用多线程实现一个线程输出奇数,另一个线程输出偶数,要求两个线程交替输出

如何实现创建两个线程,然后一个输出奇数,一个输出偶数,而且两个线程得交替输出。

m0_74979128的博客 1008

多线程交替输出问题

面试常见题。问题描述:两个线程分别输出数字和字母,但是交替输出,最终输出结果为1a2b3c……;涉及到多线程锁的知识。使用wait和notify,即先定义一个锁,只有在线程持有锁的时候才可以打印,一个线程打印完成本次任务之后,唤醒另外一个线程执行打印,如此交替执行。 解决方法二: 使用ReentrantLock和Condition,这种方式的好处是可以实现更多线程的交替输出。可以将condition理解为锁的一个队列,每new一个condition,这个锁下面就多了一个队列,不同的队列中的线程可以精确

qq_45483846的博客 602

java多线程交替输出_Java多线程交替打印字符

这玩意但凡有点Java基础的人,都会想到这是考察线程wait和notify,那么具体怎么做呢?如果长时间不写多线程程序,冷不丁的来一下,还真写不出。先来复习下wait、notify的概念:wait: Causes the current thread to wait until either another thread invokes the notify() method or the not...

weixin_42356331的博客 273

多线程 交替输出文字

用两个线程,一个输出字母,一个输出数字,交替输出1A2B3C4D5E6G… 普通解法 class Demo{ static Thread t1 =null,t2 = null; public static void main(String[] args) throws Exception{ char[] aI = "1234567".toCharArray(); char[] aC = "ABCDEFG".toCharArray(); t1 = new Thread(() -&gt.

尚未佩妥剑 转眼便江湖 278

用两个线程交替输出a-z (线程安全)

/** * 两个线程 交替输出啊a -z 相当于交替输出计数偶数 */ public class Demo02 { public static void main(String[] args) { Chars chars = new Chars(); Thread t1 = new Thread(new A(chars)); Thread t2 = new Thread(new B(chars)); t1.setName("线..

m0_67258395的博客 246
上一篇: 深入理解Java内存模型(二)——重排序
下一篇: 生产者/消费者模式
依栏听风雨
博客等级 码龄15年 24粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值