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;
}

相关文章:

  • 2022-12-23
  • 2021-06-11
  • 2022-02-08
  • 2021-06-24
  • 2021-11-12
  • 2021-06-17
  • 2022-02-09
猜你喜欢
  • 2021-12-18
  • 2021-07-19
  • 2022-12-23
  • 2021-11-15
  • 2022-12-23
  • 2021-07-18
  • 2021-09-15
相关资源
相似解决方案