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();//创建资源对象
}
}
线程安全问题的产生原因分析
于 2020-10-05 19:04:26 首次发布