课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发语言是目前大多数软件开发程序员都在学习和使用的热门编程语言之一,而本文我们就通过案例分析来简单了解一下,Java编程开发线程安全性常见问题。
1、什么是线程安全性
当多个线程访问某个类时,不管运行时环境采用何种调用方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。
无状态的对象一定是线程安全的,比如:Servlet。
2、竞争条件
由于不恰当的执行时序而出现不正确的结果的情况,就是竞争条件。
“先检查后执行”操作,即通过一个可能实效的观测结果来决定下一步的动作。
3、复合操作
原子操作是指,对于访问同一个状态的所有操作(包括此操作本身)来说,这个操作是以一个原子方式执行(不可分割)的操作。
为了确保线程安全性,包含了一组必须以原子方式执行的操作,称为复合操作。
递增运算可以使用一个现有的线程安全类,确保线程安全性。
4、加锁机制
当类只有一个状态变量时,可以通过线程安全的状态变量来维护类的线程安全性。但如果类有更多的状态时,就不能只添加更多线程安全的状态变量了。要保持状态的一致性,就需要在单个原子操作中更新所以相关的状态变量。
5、内置锁
Java提供一种内置锁:同步代码块,它包括:一个作为锁的对象引用、一个作为由这个锁保护的代码块。
以关键字synchronized来修饰的方法就是一种横跨整个方法体的同步代码块,其中该同步代码块的锁就是方法调用所在的对象。静态的synchronized方法以Class对象作为锁。
线程在进入同步代码块之前会自动获得锁,在退出同步代码块是自动释放锁。多只有一个线程能持有这种锁,因此同步代码会以原子方式执行。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。