1、是否是多线程环境
2、是否有共享数据
3、是否有多条语句操作共享数据
1和2 的问题我们改变不了,只能改变一下c
改变思想:
把多条语句操作共享数据的代码包成一个整体,让某个线程在执行的时候,别人不能执行。
线程同步机制
synchronized(对象){
需要同步的代码块
}
注:同步可以解决安全问题的根本原因就在那个对象上,该对象如同锁的功能。
多个线程必须是同一把锁
package thread;
/*
* 电影院卖票,共100张票(两部电影),而它有3个售票窗口售票,请设计一个程序模拟该电影院售票
* 继承Thread类实现
*/
public class SellTicket implements Runnable {
private int tickets = 100;
//创建锁对象
private Object ob = new Object();
@Override
public void run() {
while (true) {
synchronized (ob) {
if(tickets > 0) {
System.out.println(Thread.currentThread().getName()+"正在出售第"+(tickets--)+"张票。" );
}
}
}
}
}