Java多线程实现交替打印1-100的数字

Java多线程实现交替打印1-100的数字有两种方式:

  1. 同步代码块+notify、wait方法实现;
  2. 使用Lock锁实现。

代码一:

public class PrintNumberTest2 {
   public static void main(String[] args) {
       PrintNumberRunnable runnable = new PrintNumberRunnable();
       Thread t1 = new Thread(runnable);
       Thread t2 = new Thread(runnable);
       Thread t3 = new Thread(runnable);
       t1.start();
       t2.start();
       t3.start();
   }
}

/**
* 使用同步代码块和notify、wait方法实现
*/
class PrintNumberRunnable implements Runnable{

   private int num = 1;

   @Override
   public void run() {
       while (true){
           synchronized (this){
               if (num <= 100){
                   //唤醒一个阻塞的线程
                   notify();
                   System.out.println(Thread.currentThread().getName()+":"+num++);
                   try {
                       //阻塞当前线程
                       wait();
                   } catch (InterruptedException e) {
                       throw new RuntimeException(e);
                   }
               }else {
                   break;
               }

           }
       }
   }
}

方式二:

import java.util.concurrent.locks.ReentrantLock;


public class PrintNumberTest2 {
    public static void main(String[] args) {
        PrintNumberRunnable runnable = new PrintNumberRunnable();
        Thread t1 = new Thread(runnable);
        Thread t2 = new Thread(runnable);
        Thread t3 = new Thread(runnable);
        t1.start();
        t2.start();
        t3.start();
    }
}

/**
 * 使用Lock锁来实现
 */
class PrintNumberRunnable implements Runnable{

    private int num = 1;
    private final ReentrantLock lock = new ReentrantLock(true);

    @Override
    public void run() {
        while (true){
                try{
                    if (num <= 100){
                        //加锁
                        lock.lock();
                        System.out.println(Thread.currentThread().getName()+":"+num++);
                    }else {
                        break;
                    }
                }finally {
                    //释放锁
                    lock.unlock();
                }

        }
    }
}


你可能感兴趣的:(java基础,java,开发语言)