java中synchronized、Lock实现线程安全 #干货

线程安全:由并行变为串行地执行某代码块

 是否同步效率使用场景
线程安全 并发访问共享资源
非线程安全(出现并发问题) 吞吐量优先

用synchronized实现线程安全

package com.zjazn.toPage;

public class DuoXX implements Runnable{
   int num=100;
   public void run() {
       while (true){
           synchronized (this){//this是任何对象,就像一个厕所,什么东西能警示有没有人呢,可以是警示灯或一个牌子都可以任意的对象。
               if(num>0){
                   System.out.println(Thread.currentThread().getName()+":卖出了第"+(num--)+"张票!");
              }else {
                   break;
              }
          }
      }



  }

   public static void main(String[] args) {
       DuoXX duoXX = new DuoXX();
       Thread zhuang = new Thread(duoXX,"小庄");
       Thread hua = new Thread(duoXX,"小花");
       zhuang.start();
       hua.start();
       
  }
}

用Lock使用线程安全

package com.zjazn.toPage;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class DuoXX implements Runnable{
   private int num=100;
   private Lock locke = new ReentrantLock();
   public void run() {
       
       while (true){
           locke.lock();
               if(num>0){
                   System.out.println(Thread.currentThread().getName()+":卖出了第"+(num--)+"张票!");
              }else {
                   break;

              }
           locke.unlock();
      }




  }

   public static void main(String[] args) {
       DuoXX duoXX = new DuoXX();
       Thread zhuang = new Thread(duoXX,"小庄");
       Thread hua = new Thread(duoXX,"小花");
       zhuang.start();
       hua.start();

  }
}
posted @ 2020-12-26 11:35  小庄的blog  阅读(215)  评论(0编辑  收藏  举报