`
geelong
  • 浏览: 119784 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

多线程效率问题

阅读更多

 

package ThreadTest;

public class ThreadTest3 {
	public static void main(String args[]){
        MyThread mt = new MyThread() ;    // 定义线程对象
   
        Thread t1 = new Thread(mt) ;    // 定义Thread对象
//        Thread t2 = new Thread(mt) ;    // 定义Thread对象
//        Thread t3 = new Thread(mt) ;    // 定义Thread对象
        t1.start() ;
//        t2.start() ;
//        t3.start() ;
    }
}

class MyThread implements Runnable{
    private int ticket = 5 ;    // 假设一共有5张票
    private long start = 0;
    public void run(){
    	sale();
    }
    private synchronized void sale(){
    	if (start == 0){
    		start = System.currentTimeMillis();
    	}
    	 while(ticket>0){
             try {
                 Thread.sleep(300);
             } catch (InterruptedException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
             }
             System.out.println("卖票:ticket = " + ticket-- );
         }
    	 if (ticket == 0){
    	      System.out.println("cost" + (System.currentTimeMillis() - start));
    	 }
    }
}

 

cost1515

 

在线程同步下,使用多线程和单线程时间都在1515ms之间,多线程效率并不比单线程效率高

 

在线程不同步下,使用多线程时间都在906ms之间,多线程效率比单线程效率高

 

 

package ThreadTest;

public class ThreadTest3 {
	public static void main(String args[]){
        MyThread mt = new MyThread() ;    // 定义线程对象
   
        Thread t1 = new Thread(mt) ;    // 定义Thread对象
        Thread t2 = new Thread(mt) ;    // 定义Thread对象
        Thread t3 = new Thread(mt) ;    // 定义Thread对象
        t1.start() ;
        t2.start() ;
        t3.start() ;
    }
}

class MyThread implements Runnable{
    private int ticket = 5 ;    // 假设一共有5张票
    private long start = 0;
    public void run(){
    	sale();
    }
//    private synchronized void sale(){
    private void sale(){
    	if (start == 0){
    		start = System.currentTimeMillis();
    	    System.out.println("cost");
    	}
    	 while(ticket>0){
             try {
                 Thread.sleep(300);
             } catch (InterruptedException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
             }
             System.out.println("卖票:ticket = " + ticket-- );
         }
    	 if (ticket <= 0){
    	      System.out.println("cost" + (System.currentTimeMillis() - start));
    	 }
    }
}
 

 

cost

卖票:ticket = 5

卖票:ticket = 5

卖票:ticket = 4

卖票:ticket = 3

卖票:ticket = 2

卖票:ticket = 3

卖票:ticket = 1

cost907

卖票:ticket = 0

卖票:ticket = 1

cost907

cost907

分享到:
评论
1 楼 tomfish88 2012-05-09  
你用5条数据太少了,你用50000条你就看出差距了

相关推荐

    多线程_按键精灵经典多线程操作_

    在IT行业中,多线程是一种常见的编程技术,它允许程序同时执行多个独立的任务,从而提高计算机系统的效率和响应性。特别是在自动化工具如“按键精灵”中,多线程的应用能够显著提升其性能和实用性。 标题“多线程_...

    多线程编程模型API

    - **多线程效率问题**(Chap5):多线程并不总是能提高效率,过度的上下文切换和竞态条件可能导致性能下降。 - **生产者消费者模型**(Chap6, Chap7):这是一个经典的多线程问题,涉及到如何在不引入数据竞争的...

    一个多线程示例程序及多线程常见问题介绍

    在IT领域,多线程是程序设计中的一个重要概念,它允许程序同时执行多个任务,显著提高了计算机系统的效率和响应速度。C++Builder是一款强大的集成开发环境(IDE),它支持C++语言,为开发者提供了创建多线程应用的...

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

    在IT行业中,多线程是Java编程中一个重要的高级特性,尤其对于开发高效能和响应迅速的应用至关重要。这个“多线程终极案例程序”...通过学习和实践这个案例,开发者可以深入理解Java多线程并提高解决实际问题的能力。

    QT+OPENGL 多线程测试

    QT+OpenGL多线程测试是将高性能图形渲染与Qt框架结合的一种技术应用,它通过利用多线程的优势来提升程序的运行效率。在本项目中,开发者采用了2D纹理贴图的方法,使得图像处理和显示更为高效。接下来,我们将深入...

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

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

    多线程编程示例

    总的来说,多线程编程是提升软件性能和响应能力的重要手段,学习如何有效利用多线程,不仅可以提高程序的并发性,还能解决复杂的问题,如异步I/O、并行计算等。通过不断实践和学习,你将在多线程的世界里游刃有余。

    javad多线程

    Java 多线程编程是指在一个程序中可以运行多个线程,以提高程序的执行效率和响应速度。在 Java 中,多线程编程可以通过 Thread 类和 Runnable 接口来实现。 为什么需要多线程? 在单线程程序中,如果某个任务需要...

    多线程的运用e语言多线程 e多线程

    本文将深入探讨E语言多线程的基本概念、优势、实现方式以及常见问题。 一、多线程概述 多线程是操作系统提供的一个特性,它允许多个任务在单个进程中并行执行。在E语言中,多线程能够帮助开发者在处理大量I/O操作、...

    鱼刺多线程模块

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

    C#多线程读写sqlite

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

    易语言源码多线程类源码.rar

    多线程技术是现代软件开发中不可或缺的一部分,它允许程序同时执行多个任务,提高系统资源利用率,提升程序运行效率。 1. 多线程基础:在易语言中,多线程可以通过创建并启动线程对象来实现。线程是程序执行的基本...

    c语言多进程多线程编程

    在计算机科学中,多进程和多线程是两种并发执行的方式,它们允许程序在同一时间处理多个任务,从而提高系统的效率和响应性。C语言作为一门底层且强大的编程语言,提供了丰富的系统调用接口来实现多进程和多线程编程...

    单线程与多线程的区别

    对于计算密集型任务,多线程可以利用多核CPU的优势,提高运行效率;而对于I/O密集型任务,使用异步编程或者事件驱动模型(如Node.js中的事件循环)可能更为合适,因为它们可以避免不必要的线程切换开销。 在Java或...

    Linux下C语言多线程编程实例

    多线程编程可以大大提高程序的执行效率和响应速度。但是,多线程编程也存在一些复杂性,例如线程之间的同步和互斥控制等问题。 在 Linux 下,多线程编程使用的是 POSIX 规范,提供了很多有用的函数和变量来控制线程...

    QT中sqlite多线程操作4个注意问题

    然而,多线程环境下的数据库操作相较于单线程来说更为复杂,需要特别注意一些细节问题,以确保程序的稳定性和效率。本文将总结在Qt环境下进行SQLite多线程操作时遇到的四个关键问题及其解决方案。 #### 1. 多线程下...

    易语言多线程访问网页

    3. **多线程同步**:在多线程环境中,数据共享可能会引发竞态条件和死锁问题。易语言提供了“信号量”、“事件”等同步机制,确保线程间安全的数据交互。例如,当一个线程正在处理数据时,其他线程需要等待,直到...

    深入浅出 Java 多线程.pdf

    2. 增加程序的 Bug 率:多线程编程可以增加程序的 Bug 率,因为它需要处理线程之间的同步和通信问题。 3. 需要更多的系统资源:多线程编程需要更多的系统资源,因为每个线程都需要占用一定的系统资源。 四、多线程...

    Delphi多线程详解_delphi_delphi多线程_多线程_

    在编程领域,多线程是一种常见且强大的技术,它允许应用程序同时执行多个任务,从而提高程序的效率和响应性。Delphi,作为一个流行的Object Pascal开发环境,提供了丰富的工具和库来支持多线程编程。本篇文章将深入...

    多线程读写问题循环buffer

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在处理大文件读写时,可以显著提升程序的效率。本示例中的“多线程读写问题循环buffer”着重探讨了如何在多个线程之间安全地共享一个循环缓冲区,以实现高效...

Global site tag (gtag.js) - Google Analytics