同步线程(解决线程安全)
线程安全问题产生的原因:
多个线程通过多条语句去操作共享数据
怎样解决线程的安全问题
当某一个线程在操作数据时,它没有操作完,其它的线程是不允许操作的。
只有当这个线程执行完成后,我们才允许其它线程操作。我们管这种机制叫锁的机制.
线程同步的问题
两种解决方式
1.使用synchronized 块
synchronized(对象){
多条语句操作的数据
}
锁的对象可以是任意对象
2.使用synchronized 方法
使用同步代码块解决安全问题注意事项
所有的线程在操作时,要保证线程是安全的,
必须保证所使用的锁是同一个.
同步方法
其时就是使用synchronized去修饰一个方法.
同步代码块与同步方法的原理是一样的,
区别在于它们所控制的范围不一样。
同步方法它是将整个方法都锁定。
线程没有执行完这个方法,其它线程是不能执行的。
而同步代码块我们可以控制只方法中的某一部分去锁。
在实际操作中建议使用同步代码块。
同步的弊端:
多线程的优点:提高效率
使用同步后就使的多线程程序的效率降低.
将同步方法详细分析
同步方法它其时也是使用同步代码块实现的。
那么同步方法它所使用的锁是什么?
非静态的同步方法所使用的锁对象就是this
静态的同步方法所使用的锁对象不是this,
当前静态同步方法所使用的锁对象就是线程类的.class文件对象.
java中的所有的类都有一个静态的属性叫做.class
它的作用是得到当前类的字节码对象. |