`
paddy.w
  • 浏览: 505097 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

优化多线程执行效率

    博客分类:
  • Java
阅读更多
        摘抄自http://zhmocean.iteye.com/blog/759809
        1、使用实例锁而非类锁。比如:
public synchronized void foo1(int k){
		String key = Integer.toString(k);
		String value = key+”value”;
		if(null == key){
			return;
		}else{
			maph.put(key, value);
		}
	}

        此时加的是类锁,我们只要改成:
public void foo1(int k){
		String key = Integer.toString(k);
		String value = key+”value”;
		if(null == key){
			return;
		}else
			synchronized (this){
				maph.put(key, value);
			}
	}

        就可以把时间损耗降低 25% 。

        2、使用细粒度锁。即,对共享资源加锁而非方法(实质是对象锁)比如:
public synchronized void addUser1(String u){
		users.add(u);
	}
	
	public synchronized void addQuery1(String q){
		queries.add(q);
	}

       实质是加了类锁,导致线程等待时间产生无谓的浪费,那么我们可以改成:
public void addUser2(String u) {
		synchronized (users) {
			users.add(u);
		}
	}

	public void addQuery2(String q){
		synchronized (queries) {
			queries.add(q);
		}
	}

        经过这样优化,时间消耗降低了 67%

        3、锁定元素而非集合。比如:
public synchronized void put1(int index, String k){
		share[index] = k;
	}

       可以改为:
public void put1(int index, String k){
		synchronized(locks[index%N_LOCKS]){
			share[index] = k;
		}
	}

       时间降低 66% 的损耗

        4、使用原子 Atomic 系列类型进行无锁编程。
        具体可见 AtomicLongArray 的用法(此用法在 JDK1.5+ 里可用)

        问题的关键点就在共享资源的调度和使用,其中一个原则就是,共享资源越少越好,线程间交互越少,效能越高。
分享到:
评论

相关推荐

    多线程并行执行,汇总结果

    在IT行业中,多线程并行执行是一种常见的优化策略,特别是在处理大数据量或者需要高性能计算的任务时。"CountDownLatch" 和 "Thread" 是Java编程语言中实现多线程并行执行的关键工具,它们有助于提高程序的运行效率...

    C#多线程执行

    本篇文章将深入探讨C#中的多线程执行,并结合“TaskSortRelationArrange”这个文件名,推测其可能涉及到的任务排序与关系安排。 一、C#多线程基础 C#中的多线程主要依赖于System.Threading命名空间,其中Thread类是...

    易语言多线程执行任务例程

    在这个“易语言多线程执行任务例程”中,我们将深入探讨如何在易语言中利用多线程技术来提升程序的运行效率和并发能力。 多线程是现代计算机编程中的一个重要概念,它允许一个程序同时执行多个任务,从而充分利用...

    多线程并发执行任务

    多线程并发执行意味着多个线程在同一时间段内交替运行,提升了程序的执行效率。 在Java中,创建线程有两种主要方式: 1. 继承`Thread`类:创建一个新的类,该类继承自`java.lang.Thread`,然后重写`run()`方法。...

    易语言多线程多次启动一个子程序

    在编程领域,多线程是实现并发执行任务的重要机制,特别是在需要高效利用系统资源和提高程序响应速度的情况下。易语言,作为一款中国本土的、面向初学...在实际开发中,不断实践和优化,将是提升多线程编程能力的关键。

    利用MIPS多线程处理器优化SoC设计

    MIPS架构,作为一款广泛应用于嵌入式系统和网络设备的处理器架构,通过其多线程特性,为SoC设计提供了性能优化的新思路。 ### 多线程处理器的定义和目的 多线程是一种可以基于硬件或者软件实现的处理技术,其核心...

    前端请求,多线程执行

    在IT行业中,前端请求与多线程执行是两个重要的概念,尤其在构建高效、响应迅速的Web应用时显得至关重要。本文将围绕这两个主题展开,详细解释它们的含义、作用以及如何在实际开发中运用。 首先,让我们理解"前端...

    多线程终极案例程序(多线程进阶)

    总之,这个“多线程终极案例程序”覆盖了多线程编程的核心概念和实践技巧,包括线程创建、通信、同步、安全以及性能优化。通过学习和实践这个案例,开发者可以深入理解Java多线程并提高解决实际问题的能力。

    多线程执行任务具体实现

    本篇文章将深入探讨多线程执行任务的具体实现方式。 一、线程的概念与优势 线程是操作系统分配CPU时间的基本单元,一个进程可以包含一个或多个线程。相比于单线程,多线程能充分利用多核处理器资源,减少程序等待I/...

    多线程,数据库优化,锁.docx

    使用多线程的主要目的是提高程序的执行效率和响应速度。相比于单线程程序,多线程程序具有以下优势: - **提高并发能力**:在一个程序中,多个线程可以并行执行,提高了系统的整体吞吐量。 - **提高资源利用率**:...

    鱼刺多线程注册源码例子(鱼刺多线程稳定框架)

    "鱼刺多线程注册源码例子"是一个基于"鱼刺多线程稳定框架"的编程实践,旨在展示如何在软件开发中有效地利用多线程技术来提高程序的执行效率和稳定性。在这个例子中,"鱼刺框架"可能是一个专门为多线程编程设计的开源...

    c# 多线程 上位机

    总结,C#的多线程技术和模拟消息队列在上位机开发中起着至关重要的作用,它们能够优化性能,提高系统的响应速度,并为复杂任务的管理提供有效手段。理解并熟练运用这些技术,是成为一名合格的C#上位机开发者的关键。

    C# 多线程实例多线程实例多线程实例

    了解这些状态有助于调试和优化多线程程序。 6. 异常处理: 在多线程环境中,每个线程都有自己的异常处理栈。主线程无法捕获到子线程中抛出的异常,因此需要在子线程中进行适当的异常处理。 7. 线程安全: 对于...

    C#多线程读写sqlite

    在C#编程中,多线程技术常用于提高应用程序的执行效率,特别是在处理数据库操作时。SQLite是一款轻量级、嵌入式的关系型数据库,它广泛应用于桌面应用、移动设备和Web开发。当多线程环境对SQLite进行读写操作时,...

    易语言多线程访问网页

    在易语言中,多线程技术是一项重要的特性,它允许程序同时执行多个任务,提高了程序的执行效率。本主题将深入探讨如何使用易语言实现多线程访问网页的功能。 在多线程访问网页的场景中,通常涉及到以下几个关键知识...

    yolov5目标检测多线程C++部署

    在C++中,多线程可以借助`<thread>`库来实现,通过创建并管理多个执行线程来同时处理任务,从而提高程序执行效率。 YOLOv5的模型通常是以ONNX或TensorRT等格式进行部署。ONNX(Open Neural Network Exchange)是一...

    多线程编程示例

    在IT领域,多线程编程是一项关键技能,尤其是在性能优化和并发处理方面。本文将深入探讨多线程编程的基础知识,以帮助初学者快速入门。 首先,我们需要理解什么是多线程。多线程是指在一个进程中同时执行多个独立的...

    C++多线程SOCKET收发

    而多线程则允许多个任务(线程)并行执行,提高了程序的效率。在C++中,可以使用`<thread>`库来创建和管理线程。创建新线程的基本步骤包括定义线程函数、创建线程对象并启动线程。例如: ```cpp #include void ...

    鱼刺多线程模块

    "鱼刺多线程模块"是一个专为提升程序运行效率而设计的开源组件,它主要聚焦于多线程技术的应用。在计算机科学中,多线程是并发执行多个任务或子任务的一种方法,使得程序能够更高效地利用系统资源,特别是在多核...

    单线程与多线程的区别

    通过分析和运行这些示例,你可以深入学习到如何在多线程环境中实现任务调度、同步和通信,以及如何优化多线程程序的性能。记住,实践是检验理论的最好方式,所以动手尝试这些示例将对你的编程技能大有裨益。

Global site tag (gtag.js) - Google Analytics