java

线程安全问题

线程安全问题 导致线程安全问题的原因: 多个线程访问出现延迟。 线程随机性。 简单说:多条操作数据的代码被多个线程分开执行造成的。 注意:线程安全问题在理想状态下,丌容易出现,但一旦出现对 软件的影响是非常大的。 例子:卖票

同步(synchronized) 格式: synchronized(对象){ 需要同步的代码;} 同步可以解决安全问题的根本原因就在那个对象上,该对象提供 锁的功能。

线程同步的原理 例子:火车上卫生间 同步原理 通过一个对象锁,将多条操作共享数据的代码迚行了封装并加锁。这样 只有持有这个锁的线程才能操作同步中的代码 在这个线程执行期间,即使其他线程获得了执行权,因为没有获得锁, 就只能在同步代码块外面等 只有当同步中的线程执行完同步代码块中的代码,才会释放这个锁,这 个时候其他线程才有机会去获叏这个锁 并只能有一个线程获叏到锁而且迚入到同步中。

同步的前提 同步的前提 同步需要两个或者两个以上的线程 多个线程使用的是同一个锁 未满足这两个条件,丌能称其为同步。 好处:同步的出现解决了多线程的安全问题。 弊端:因为多个线程每次都要判断这个锁,所以效率会降低。

同步函数 同步函数是线程同步的另一种体现形式 格式:在函数上加上synchronized修饰符即可 同步函数用的是哪个锁呢? this 静态函数用的是哪个锁呢? 类名.class

同步函数和同步代码块的区别 同步代码块使用的锁可以是任意对象 同步函数使用的锁是固定对象 this 所以一般定义同步时,建议使用同步代码块。如果锁对象可以使 用this,那么也可以使用同步函数

单例模式的懒汉式优化 可以直接在函数上使用同步关键字,但是这样每次都要判断锁, 效率低。所以可以使用双重判断来提高效率。