1.问题:卖票过程中,出现重票、错票–>出现了线程的安全问题
2.问题出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与进来操作车票
3.如何解决:当一个线程A在操作共享数据ticket时,其他线程不能参与进来,直到线程A操作完之后,其他线程才可以操作共享数据ticket, 这种情况,即使线程A出现阻塞,也不能被改变
4.在Java中,我们通过同步机制,来改变线程的安全问题
synchronized(同步监视器){
需要被同步的代码
}
声明:
1.操作共享数据的代码就是需要被同步的代码
2.共享数据:多个线程共同操作的变量,比如:ticket就是
3.同步监视器,俗称:锁 任何一个类的对象都可以充当锁
要求:多个线程必须要共用同一把锁(只声明一个对象)
补充,在实现Runnable接口创建多线程的方式中,我们可以考虑使用this充当同步监视器。
方式二:同步方法如果操作共享数据的代码完整的声明在一个方法中,我们不妨将此方法声明同步的。
5.同步的方式,解决了线程的安全问题。-----好处
操作同步代码时,只能有一个线程参与,其他线程等待,相当于是一个单线程的过程。–坏处
- 1.同步方法仍涉及到同步监视器,只是不需要我们声明
- 2.非静态的同步方法,同步监视器是this
- 静态的同步方法,同步监视器是 当前类本身



