多线程-线程按照特定顺序轮询打印

本文介绍了如何在多线程环境下实现按特定顺序(ABC)循环打印。通过两种方法实现:一是使用ReentrantLock和Condition,虽然空间开销大但避免了不必要的上下文切换;二是利用synchronized、wait和notifyAll,但可能导致额外的上下文切换开销。测试结果显示,第一种方法在性能上更优。
摘要由CSDN通过智能技术生成
题目:

编写程序,开启三个线程,这三个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印十次,要求输出结果必须按照ABC的顺序显示,如:ABCABCACB…

方法一:指定线程唤醒轮循打印,使用ReentrantLock和Condition。
本方法空间开销较大,因为使用了三个条件对象,但是本方法是定点唤醒线程,并不会产生额外的上下文切换开销。总体来说,本方法性能更优。
package ThreadDemo.ThreadExercise;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;

class Demo3 implements Runnable{
   
    private ReentrantLock lock;
    private static volatile String nw;
    private int i;
    private Condition me;
    private Condition next;
    private String nextName;
    public Demo3(String nextName,ReentrantLock lock,Condition me,Condition next) {
   
        this.lock=lock;
        this.i=0;
        this.next=next;
        this.me=me;
        this.nextName=nextName;
    }
    public static void setNW(String s){
   
        nw=s;
    }
    @Override
    public void run() {
   
         while(i++<10){
   
             lock.lock();
               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值