线程安全问题的产生原因分析

    科技2022-08-24  100

    package cn.itcast_01; import cn.itcast_01.MyRunnable; /* * 如何解决线程安全问题? * 要想解决问题,就要知道哪些原因会导致问题(而且这些原因也是判断一个程序是否会有线程安全问题的标准) * A:是否是多线程 * B:是否有共享数据 * C:是否多条语句操作共享数据 * * 让我们回想以我们的程序有没有上面你的问题呢? * A:是否是多线程 是 * B:是否有共享数据 是 * C:是否多条语句操作共享数据 是 * * * 由此可见我们程序出现问题是正常的,因为它满足出现问题的条件 * 如何解决问题呢? * A和B的问题我们改变不了,我们只能想办法把C改变 * 思想: * 把多条语句操作共享数据的代码给包成一个整体,让某个线程在执行的时候,别人不能来执行 * 怎么包装呢? * Java给我们提共了:同步机制 * * 同步代码块: * 格式:synchronized(对象){ * 需要同步的代码; * } * A:对象是什么? * * B:需要同步的代码块是哪些? * 把多条语句操作共享数据的代码的部分给包起来 * * 注意; * 同步可以解决安全问题的根本原因就在那个对象上。该对象就如同锁的功能 * 多个线程必须是同一把锁 * * */ public class 线程安全问题的产生原因分析 { public static void main(String[] args) { //创建资源对象 MyRunnable my = new MyRunnable(); //创建三个线程对象 Thread t1 = new Thread(my,"窗口1"); Thread t2 = new Thread(my,"窗口2"); Thread t3 = new Thread(my,"窗口3"); //启动线程 t1.start(); t2.start(); t3.start();//创建资源对象 } }
    Processed: 0.008, SQL: 9