synchronized同步方法的问题
有些情况下,在方法上面加synchronized同步,会有性能问题,所以一般在执行的代码块那里加上synchronized同步。
一 同步代码块
1.为了解决并发操作可能造成的异常,java的多线程支持引入了同步监视器来解决这个问题,使用同步监视器的通用方法就是同步代码块。其语法如下:
synchronized(obj){
//同步代码块
}
其中obj就是同步监视器,它的含义是:线程开始执行同步代码块之前,必须先获得对同步监视器的锁定。任何时刻只能有一个线程可以获得对同步监视器的锁定,当同步代码块执行完成后,该线程会释放对该同步监视器的锁定。虽然java程序允许使用任何对象作为同步监视器,但 是同步监视器的目的就是为了阻止两个线程对同一个共享资源进行并发访问,因此通常推荐使用可能被并发访问的共享资源充当同步监视器。
具体例子:
问题:使用多线程程序模拟电影票售卖的过程,一共有100张电影票,3个公司对外售卖
分析:将100张电影票作为成员变量,开启三个线程开始执行,每当线程执行一次,票的总数减一
代码实现:
先创建一个Ticket类实现Runnable接口
注意:同步代码嵌套来会发生死锁,实际开发中不仅是这种嵌套才会发生死锁,所以一定要注意避免。
网友评论