• 【JAVA】线程安全的案例


    1.什么是线程安全?

    当多个线程共享同一个全局变量,做写的操作的时候,可能会受到其他线程的干扰,导致数据有问题,这种现象叫做线程安全问题。

    2.案例

    模拟火车票卖票程序,火车车厢一般都有118个座,这里新建一个火车票类,一个方法卖票。再建一个测试类

    package lock;

    public class Ticket {

     public int count = 118;

     public int sell() {
       System.out.println(Thread.currentThread().getName() + ":还剩下" + count + "张票");
       return --count;
    }
    }
    package lock;

    public class SellerSystem {

     public static void main(String[] args) {
       Ticket ticket = new Ticket();
       new Thread(new Runnable() {
         @Override
         public void run() {
           while (ticket.sell() > 0) {
             
          }
        }
      }).start();
       new Thread(new Runnable() {
         @Override
         public void run() {
           while (ticket.sell() > 0) {

          }
        }
      }).start();
    }
    }

     

    3.为了保证线程安全问题

    第一种方法加synchronized关键字

    public synchronized int sell() {
     System.out.println(Thread.currentThread().getName() + ":还剩下" + count + "张票");
     return --count;
    }

    第二种方法,使用锁

    public int sell() {
     lock.lock();
     System.out.println(Thread.currentThread().getName() + ":还剩下" + count + "张票");
     count--;
     lock.unlock();
     return count;
    }
    Ride the wave as long as it will take you.
  • 相关阅读:
    block iOS 块
    面试有感
    Could not automatically select an Xcode project. Specify one in your Podfile like so
    xcrun: error: active developer path
    NSDictionary
    CSS3魔法堂:CSS3滤镜及Canvas、SVG和IE滤镜替代方案详解
    转:CSS盒模型
    转:手机端html5触屏事件(touch事件)
    转: div:给div加滚动条 div的滚动条设置
    转:什么时候用阻止事件冒泡
  • 原文地址:https://www.cnblogs.com/jianpanaq/p/10264069.html
Copyright © 2020-2023  润新知