1.在多个线程同时运行时发生的异常情况统称为线程安全问题。 2.线程安全问题在理想状态下,不容易出现,但一旦出现对软件的影响是非常大的。 ---产生原因&前提: 线程随机访问性 有多个线程并行 多个线程有共享数据 多个线程操作了共享数据 ---处理方式: 使用java提供的同步机制,使某一线程的完整动作执行完毕,其他线程再进行操作 3.Java同步机制:为解决同步问题而提供的工具 原子性操作:在执行操作时,我们把一个完整动作可以称为一个原子性操作,是一个不可切割的动作。即不可被线程打断的操作。 synchronized 关键字: --同步代码块格式: synchronized(锁对象){ //该对象可以是任意对象 需要同步的代码; } --锁:几个线程需要使用相同的锁对象进行同步操作,使用不同的锁是无法完成同步操作的。 --Synchronized内需要同步的代码即为一个原子性操作。 --同步方法:方法上声明,将所在对象作为默认锁,即this。 --同步静态方法:将方法所在类作为默认所,即XX.class。 同步的特点好处和弊端: --特点:当一个代码块被同步后,当一个线程访问时,其它线程列队等待。它能保证同一时刻只为一个线程服务,一个线程执行完毕,才能轮到下一个线程执行; --好处:可以解决多线程访问的并发性问题; --弊端:因为要使其它线程列队等待,所以会有其它额外的操作,而且这些操作都非常耗时,所以效率比较低;
|