码迷,mamicode.com
首页 > 编程语言 > 详细

【JAVA】线程安全的案例

时间:2019-01-25 01:13:45      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:pack   ticket   zed   现象   contain   str   一个   rgs   and   

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】线程安全的案例

标签:pack   ticket   zed   现象   contain   str   一个   rgs   and   

原文地址:https://www.cnblogs.com/jianpanaq/p/10264069.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!