线程的同步
为什么需要同步
【示例代码】,取得 0~10 的和采用相同的线程对象启用两个线程进行计算(共享一个对象启动两个线程)
以上 t1 和 t2 并发执行,s 为每个线程的局部变量,位于各自的栈帧中,因为栈帧中的数据是不会互相干扰的,所有计算结果都为 45
【示例代码】,取得 0~10 的和采用两个线程进行计算,将s 改为成员变量(共享一个对象启动两个线程)
为什么出现以上的问题,因为共享了同一个对象的成员变量s,两个线程同时对其进行操作, 所以产生了问题,此时称为此时 Processor 为线程不安全的,如果想得到正确的结果,必须采用线程同步,加锁,该变量不能共享使用
使用线程同步
线程同步,指某一个时刻,指允许一个线程来访问共享资源,线程同步其实是对对象加锁,如果对象中的方法都是同步方法,那么某一时刻只能执行一个方法,采用线程同步解决以上的问题,我们只要保证线程一操作s 时,线程2 不允许操作即可,只有线程一使用完成s 后,再让线程二来使用s 变量
执行正确
以上示例,如果不采用线程同步如何解决?可以让每个线程创建一个对象,这样在堆中就不会出现对象的状态共享了,从而可以避免线程安全问题
为每一个线程创建一个对象来解决线程安全问题
以上输出完全正确,每个线程操作的是自己的对象,没有操作共享的资源
以上就是多线程相关的知识点,持续更新中,配套视频教程👇,正在学习Java的同学们一定要关注哦~~
Java零基础进阶视频教程
转载:https://blog.csdn.net/bjpowernode_com/article/details/114264355
查看评论