【面试题 】多种方式实现 线程交替打印0-100

线程交替打印

当时线程交替打印问题核心 :主要就是对Java锁的理解和使用,废话不多说上代码

Synchronized 同步锁方式

public class ThreadQuestOne {
  	//简单计数器
   private static  int COUNT=0;
   //对象锁
   private static final Object LOCK=new Object();

 public static void main(String[] args) {
  syncLock();
 }
 
 private static  void  syncLock() {
  new Thread(()->{
   while(COUNT<100) {
    synchronized(LOCK) {
     if ((COUNT&1)==0) {
      System.out.println("偶数线程||"+(COUNT++));
     }
    }
   }
  }).start();
  new Thread(()->{
   while(COUNT<100) {
    synchronized(LOCK) {
     if ((COUNT&1)==1) {
      System.out.println("奇数线程||"+(COUNT++));
     }
    }
   }
  }).start();
 }
}

Notify wait 方式

public class ThreadQuestTWO {
  	//简单计数器
   private static  int COUNT=0;
   //对象锁
   private static final Object LOCK=new Object();

 public static void main(String[] args) {
  notifyAllMethod();
 }
 
 private static void notifyAllMethod(){
  Runnable  rs= ()->{
   while (COUNT<=100) {
    synchronized (LOCK) {
     System.out.println(Thread.currentThread().getName()+""+(COUNT++));
     LOCK.notifyAll();
     if ((COUNT&1)==0) {
      //阻塞
      try {
       LOCK.wait();
      } catch (InterruptedException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     }
    }
   }
  };
  CompletableFuture.allOf(CompletableFuture.runAsync(rs),
    CompletableFuture.runAsync(rs)).join();
 }

1.8 JDK CompletableFuture方式

public class ThreadQuestTWO {
  	//简单计数器
   private static  int COUNT=0;
   //对象锁
   private static final Object LOCK=new Object();

 public static void main(String[] args) {
  CompletableFutureTest();
 }
 
  //第三种方式相互隔离的方式
 private static void CompletableFutureTest() {
  CompletableFuture<Void> cf=CompletableFuture.runAsync(()->{
   while (COUNT<100) {
    synchronized (LOCK) {
      if ((COUNT&1)==0) {
       System.out.println("当前偶数线程"+(COUNT++));
      }
    }
   }
  });
  CompletableFuture<Void> cf1=CompletableFuture.runAsync(()->{
   while (COUNT<100) {
    synchronized (LOCK) {
      if ((COUNT&1)==1) {
       System.out.println("当前奇数线程"+(COUNT++));
      }
    }
   }
  });
  CompletableFuture.allOf(cf,cf1).join();
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值