问题描述:当多条语句在操作一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程便参与进来执行。从而造成了共享数据的错误。
问题分析:对多条操作共享数据的语句,只能让一个线程都执行完。在让其他的线程执行,即在执行的过程中,其他线程不可以参与执行。
解决方案:
JAVA中对于多线程的安全问题提供了专业的解决方案,就是同步代码块。
同步可以分别作用于代码块,函数及静态函数上,当作用于不通的位置时,其所产生的参数不同。
1.作用于代码块上
synchronized(对象)
{
需要被同步的代码
}
同类代码块要有参数对象,最简单的对象就是object类对象。
object obj = new object();
就将obj传入到synchronized(对象)对象位置即可。
2.作用于函数上
public synchronized void add() //将同步作为修饰符加入即可
{
}
函数需要被对象调用,那么函数都有一个所属的对象引用。就是this。所以同步函数使用的锁就是this.
3.作用于静态函数上
静态函数进内存中没有本类对象,但是它一定有该类对应的字节码文件对象。
类名.class。 则该对象的类型是class。
掌握同步必须把握两个前提:
1.必须要有两个或两个以上的线程。
2.必须是多线程使用同一个锁。
同步解决了多线程的安全问题,两个前提可以作为编写多线程程序的切入点进行分析
本文探讨了Java中解决多线程操作共享数据时出现的问题,通过同步代码块、同步方法及静态同步方法来确保线程安全。文章详细介绍了如何应用这些同步机制,并强调了实现多线程同步的两个关键前提。
2042

被折叠的 条评论
为什么被折叠?



