判断标准
1.是否为多线程环境
2.是否有共享数据
3.是否有多条语句操作共享数据
如何解决多线程安全问题
基本思想:让程序没有安全线程的环境
实现
把多条语句操作共享数据的代码锁起来, 让任意时刻只能有一个线程执行即可
同步代码块
锁多条语句操作共享数据, 可以使用同步代码块实现
synchronized(任意对象){
多条语句操作共享数据的代码
}
代码示例
//定义一个类SellTicke实现Runnable接口, 里面定义一个成员变量:
public class SellTicke implements Runnable {
private int ticket = 100;
private Object obj = new Object();
//在SellTicket类中重写run()方法
@Override
public void run() {
/*A 判断票数大于0就卖票,并告知是哪个窗口卖的
B 卖了之后,总票数-1
C 票没有了,也可能有人来问,所以这里用死循环让卖票的动作一直执行*/
//相同的票出现了多次
while (true) {//采用死循环
synchronized (obj) {//添加一把锁
if (ticket > 0) {
//通过sleep()方法来模拟出票时间
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "正在出售第" + ticket + "张票");
ticket--;
}
}
}
}
}