JDK1.5版本出现之前的同步代码块

本文探讨了Java中解决多线程操作共享数据时出现的问题,通过同步代码块、同步方法及静态同步方法来确保线程安全。文章详细介绍了如何应用这些同步机制,并强调了实现多线程同步的两个关键前提。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:当多条语句在操作一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程便参与进来执行。从而造成了共享数据的错误。

 

问题分析:对多条操作共享数据的语句,只能让一个线程都执行完。在让其他的线程执行,即在执行的过程中,其他线程不可以参与执行。

 

解决方案:

  JAVA中对于多线程的安全问题提供了专业的解决方案,就是同步代码块。

   同步可以分别作用于代码块,函数及静态函数上,当作用于不通的位置时,其所产生的参数不同。

    1.作用于代码块上

         synchronized(对象)

            {

                     需要被同步的代码

              }

       同类代码块要有参数对象,最简单的对象就是object类对象。

                 object obj = new object();

          就将obj传入到synchronized(对象)对象位置即可。

      2.作用于函数上

            public synchronized void add()  //将同步作为修饰符加入即可

           {

           }

  函数需要被对象调用,那么函数都有一个所属的对象引用。就是this。所以同步函数使用的锁就是this.

       3.作用于静态函数上

           静态函数进内存中没有本类对象,但是它一定有该类对应的字节码文件对象。

          类名.class。   则该对象的类型是class。

 

 

掌握同步必须把握两个前提:

   1.必须要有两个或两个以上的线程。

   2.必须是多线程使用同一个锁。

 

  同步解决了多线程的安全问题,两个前提可以作为编写多线程程序的切入点进行分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值