JAVA线程安全的案例

Posted 键盘AQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}










































以上是关于JAVA线程安全的案例的主要内容,如果未能解决你的问题,请参考以下文章

JAVA线程安全的案例

案例-- 线程不安全对象(SimpleDateFormat)

Java线程安全问题代码实现

java 多线程-线程不安全案例

多线程四大经典案例及java多线程的实现

模拟线程安全的售票案例(java)