`
swingboat
  • 浏览: 61816 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

同步(synchronized)对程序性能的影响!

    博客分类:
  • java
阅读更多
在使用多线程时,可能会访问一些全局的数据,这时必然会使用同步机制来使程序按照一定顺序来执行,这样程序的性能也会下降。所以一定要慎用同步,正确用同步。看下面的程序
        int curIndex = 0;
        AuditQueueEntry aqe;
        
synchronized (localCriticalSection) {      
            
while (curIndex < theList.size()) {
                aqe 
= (AuditQueueEntry) theList.get(curIndex);
                
if (aqe.getTrailId() == theTrailId) {
                    theList.remove(curIndex);
                }
 else {
                    curIndex
++;
                }

            }

        }

localCriticalSection做为一个信号量来控制程序对类成员变量theList的访问,从而保证了theList在同一时间只有一个程序访问。运行程序,这个函数花费了将近4秒钟。同步是很耗时间的。
在java.util.Collections中提供了很多方法来保证集合(数组)的同步访问。
我们修改类成员变量theList的实例化方法:
theList = Collections.synchronizedList(new LinkedList());

再修改处理函数:
        int curIndex = 0;
        AuditQueueEntry aqe;
//        synchronized (localCriticalSection) {
        synchronized(theList) {    
            
while (curIndex < theList.size()) {
                aqe 
= (AuditQueueEntry) theList.get(curIndex);
                
if (aqe.getTrailId() == theTrailId) {
                    theList.remove(curIndex);
                }
 else {
                    curIndex
++;
                }

            }

        }

再运行,这个函数才花费将近一秒钟的时间!
在Collections中提供了很多这类的方法。
分享到:

相关推荐

    java同步synchronized关键字用法示例

    - **代码块同步:** 也可以使用`synchronized`关键字来同步代码块,这样可以更细粒度地控制同步范围,提高程序性能。 ```java public void method() { synchronized (object) { // 代码块 } } ``` 这里的`object...

    详细解读java同步之synchronized解析

    【Java同步之synchronized解析】 Java中的`synchronized`关键字是实现多线程同步的重要机制,它确保了在并发环境中对共享资源的...理解并熟练掌握`synchronized`的使用对于编写高性能、线程安全的Java程序至关重要。

    Java 同步锁(synchronized)详解及实例

    因此,在设计多线程程序时,应尽可能减少同步的范围,只对那些确实需要保护的代码进行同步。 除此之外,Java 5引入了更高级的并发工具类,如`java.util.concurrent.locks`包下的`ReentrantLock`,它提供了可中断和...

    Android synchronized 测试案例

    - 尽量减少`synchronized`的使用,因为它会降低程序的并发性能。 - 避免死锁,合理设计同步代码块的执行顺序。 - 使用`synchronized`时,考虑使用更细粒度的锁,提高并发性。 通过这个测试案例,开发者可以深入理解...

    Java程序性能优化 让你的Java程序更快、更稳定

    Java程序性能优化是每个开发人员都需要关注的重要领域,它涵盖了多个方面,旨在提高代码执行效率,减少资源消耗,以及提升应用程序的稳定性和响应速度。在本文中,我们将深入探讨Java性能优化的关键点,帮助你的Java...

    Java synchronized详细解读.docx

    Java中的`synchronized`关键字是多线程编程中用于同步控制的关键元素,它的主要目标是解决并发环境下多个...在编写多线程程序时,开发者应该根据具体情况选择合适的同步策略,避免不必要的同步控制,以优化程序的性能。

    Synchronized关键字的用法

    通过`synchronized`关键字,开发者可以控制代码块或方法的并发访问,从而确保数据的一致性和程序的正确性。 #### 使用场景 1. **同步代码块**:可以通过`synchronized`关键字来声明同步代码块,即通过指定对象锁来...

    synchronized并发讲解源码.zip

    `synchronized`关键字主要有两种用法:修饰实例方法和同步代码块。当一个方法被`synchronized`修饰时,同一时间只能有一个线程访问该方法,其他试图访问的线程会被阻塞,直到当前线程执行完毕。这种方式保证了同一...

    c# 多线程 同步问题解决

    "C# 多线程同步问题解决" C# 中的多线程机制是指程序中包含多个执行流,即在一个程序...通过使用 Thread 类、锁机制、Monitor 类和同步块,我们可以解决多线程之间对共享资源的访问问题,从而提高程序的效率和可靠性。

    Java synchronized使用案例

    总的来说,理解并合理使用`synchronized`对于编写高效、安全的多线程Java程序至关重要。在实际开发中,应根据具体需求选择合适的同步机制,避免过度使用导致性能下降。同时,配合其他并发工具类,可以实现更灵活、...

    synchronized详解

    `synchronized`关键字在Java编程语言中扮演着至关重要的角色,它是Java实现多线程同步的主要机制。通过使用`synchronized`,可以确保同一时间只有一个线程能够执行特定代码块,从而防止数据的不一致性和线程安全问题...

    synchronized关键字的实质及用法

    理解和合理使用`synchronized`能够帮助我们构建稳定、高效的多线程程序,但同时也要注意避免潜在的死锁和性能问题。在实际编程中,应结合具体场景选择`synchronized`或者`ReentrantLock`等同步工具。

    java Thread & synchronized & concurrent 线程、同步、并发

    在Java编程语言中,线程(Thread)、同步(synchronized)和并发(Concurrency)是核心概念,它们在多任务处理和高效系统设计中扮演着重要角色。本文将深入探讨这三个主题,以及它们如何相互作用以确保程序的正确性...

    java程序性能优化

    Java程序性能优化是Java开发中的重要环节,它旨在提高应用程序的运行效率,减少资源消耗,提升用户体验。在Java世界中,性能优化涵盖了多个层面,包括代码优化、内存管理、线程调度、数据库交互以及JVM参数调整等。...

    java synchronized详解

    - **静态方法同步**:静态方法的同步是针对类级别的,这意味着所有线程都将被阻止,直到当前线程完成对静态方法的执行。 3. **`synchronized`在代码块上的应用** `synchronized`也可以应用于代码块,其语法是`...

    volatile和synchronized的区别

    2. **性能差异**:通常情况下,`volatile`的性能优于`synchronized`。这是因为`synchronized`会导致线程阻塞,而`volatile`不会。 3. **原子性**:`volatile`不能保证复合操作的原子性,而`synchronized`可以保证...

    [JAVA][synchronized的使用]

    - 性能开销:由于同步会带来上下文切换和锁竞争,所以过多使用`synchronized`可能导致性能下降。 - 无法中断:等待获取锁的线程无法被中断,除非调用`interrupt()`方法或者抛出异常。 - 不可中断的阻塞:`...

    Java程序性能优化.rar

    在Java编程领域,程序性能优化是一项至关重要的任务,它直接影响到软件的运行效率、资源消耗以及用户体验。"Java程序性能优化"这个主题涵盖了多种技术与策略,旨在提升Java应用程序的运行速度,减少内存占用,以及...

    synchronized的几种示例

    在Java编程语言中,`synchronized`关键字是...正确使用`synchronized`可以避免竞态条件和死锁等问题,从而保证多线程环境下的程序稳定性。在实际开发中,需要根据业务场景灵活运用,以达到最佳性能和安全性之间的平衡。

Global site tag (gtag.js) - Google Analytics