Thread中顺序打印线程

自我记录自我记录 加深印象

因为多线程启动后,执行的顺序基本上是无序的,因此如何控制其顺序是一个值得思考的点,这里在程序里对其进行控制

public class MyThread extends Thread {

     private String threadName;
     //与addCount结合,控制打印的位置信息    
     private int position;
     private Object lock;
     //用于控制打印顺序
     volatile private static int addCount = 1;
     //printCount用于控制打印的篇数
     private int printCount = 0;
     public MyThread(String threadName, Object lock, int position) {
         this.threadName = threadName;
         this.lock = lock;
         this.position = position;
     } 

     @Override
     public void run() {
         synchronized (lock) {
             while (true) {

                 if (addCount % 3 == position) {
                     System.out.println(this.threadName + " is printing...");
                     addCount ++;
                     printCount ++;

                     lock.notifyAll();
                     //如果将这里设定为3,那么会按顺序打印三遍结果
                     if (printCount == 2) {
                         break;
                     }

                 } else {
                     try {
                        lock.wait();
                    }
                    catch (InterruptedException e) {
                        // TODO Auto-generated catch block <br>
                        e.printStackTrace();
                    }
                 }

             }
         }
     }

     public static void main(String[] args) {
        Object lock = new Object();
        // 因为addCount = 1 而1%3 = 1,所以第一次打印的线程为A   
        MyThread myThread01 = new MyThread("A", lock, 1);
        MyThread myThread02 = new MyThread("B", lock, 2);
        MyThread myThread03 = new MyThread("C", lock, 0);

        myThread01.start();
        myThread02.start();
        myThread03.start();
    }

}

运行结果为:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值