Java零基础进阶篇之多线程详解(三)

​​​​​本篇文章讲解的知识点主要围绕多线程,废话不多说,只分享Java相关的干货!

线程的同步

为什么需要同步

【示例代码】,取得 0~10 的和采用相同的线程对象启用两个线程进行计算(共享一个对象启动两个线程

Java零基础进阶篇之多线程详解(三)_第1张图片

Java零基础进阶篇之多线程详解(三)_第2张图片

以上 t1 和 t2 并发执行,s 为每个线程的局部变量,位于各自的栈帧中,因为栈帧中的数据是不会互相干扰的,所有计算结果都为 45

【示例代码】,取得 0~10 的和采用两个线程进行计算,s 改为成员变量(共享一个对象启动两个线程)

Java零基础进阶篇之多线程详解(三)_第3张图片

Java零基础进阶篇之多线程详解(三)_第4张图片

Java零基础进阶篇之多线程详解(三)_第5张图片

为什么出现以上的问题,因为共享了同一个对象的成员变量s,两个线程同时对其进行操作, 所以产生了问题,此时称为此时 Processor 为线程不安全的,如果想得到正确的结果,必须采用线程同步,加锁,该变量不能共享使用

 

​​​​​​​使用线程同步

线程同步,指某一个时刻,指允许一个线程来访问共享资源,线程同步其实是对对象加锁,如果对象中的方法都是同步方法,那么某一时刻只能执行一个方法,采用线程同步解决以上的问题,我们只要保证线程一操作s 时,线程2 不允许操作即可,只有线程一使用完成s 后,再让线程二来使用s 变量

Java零基础进阶篇之多线程详解(三)_第6张图片

Java零基础进阶篇之多线程详解(三)_第7张图片

执行正确

以上示例,如果不采用线程同步如何解决?可以让每个线程创建一个对象,这样在堆中就不会出现对象的状态共享了,从而可以避免线程安全问题

 

​​​​​​​为每一个线程创建一个对象来解决线程安全问题

Java零基础进阶篇之多线程详解(三)_第8张图片

Java零基础进阶篇之多线程详解(三)_第9张图片

以上输出完全正确,每个线程操作的是自己的对象,没有操作共享的资源

Java零基础进阶篇之多线程详解(三)_第10张图片

以上就是多线程相关的知识点,持续更新中,配套视频教程,正在学习Java的同学们一定要关注哦~~

Java零基础进阶视频教程

 

 

 

 

你可能感兴趣的:(Java纯干货,Java学习视频教程,Java学习者入门必备,java,多线程,python,编程语言,并发编程)