`
xiebh
  • 浏览: 615998 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

多线程编程——基础篇 (一)转

阅读更多
转自:http://dev2dev.bea.com.cn/bbsdoc/20060808312.html

[写在前面]

  随着计算机技术的发展,编程模型也越来越复杂多样化。但多线程编程模型是目前计算机系统架构的最终模型。随着CPU主频的不断攀升,X86架构的硬件已经成为瓶,在这种架构的CPU主频最高为4G。事实上目前3.6G主频的CPU已经接近了顶峰。

  如果不能从根本上更新当前CPU的架构(在很长一段时间内还不太可能),那么继续提高CPU性能的方法就是超线程CPU模式。那么,作业系统、应用程序要发挥CPU的最大性能,就是要改变到以多线程编程模型为主的并行处理系统和并发式应用程序。

  所以,掌握多线程编程模型,不仅是目前提高应用性能的手段,更是下一代编程模型的核心思想。多线程编程的目的,就是"最大限度地利用CPU资源",当某一线程的处理不需要占用CPU而只和I/O,OEMBIOS等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源。从根本上说,这就是多线程编程的最终目的。

  [第一需要弄清的问题]

  如同程序和进程的区别,要掌握多线程编程,第一要弄清的问题是:线程对象和线程的区别。

  线程对象是可以产生线程的对象。比如在java平台中Thread对象,Runnable对象。线程,是指正在执行的一个指点令序列。在java平台上是指从一个线程对象的start()开始,运行run方法体中的那一段相对独立的过程。

  鉴于作者的水平,无法用更确切的词汇来描述它们的定义。但这两个有本质区别的概念请初学者细细体会,随着介绍的深入和例程分析的增加,就会慢慢明白它们所代表的真实含义。

  天下难事必始于易,天下大事必始于细。

  让我们先从最简单的"单线程"来入手:(1)带引号说明只是相对而言的单线程,(2)基于java。

  
 class BeginClass{
        public static void main(String[] args){
            for(int i=0;i<100;i++)
                System.out.println("Hello,World!");
        }
    }


  如果我们成功编译了该java文件,然后在命令行上敲入:

  java BeginClass

  现在发生了什么呢?每一个java程序员,从他开始学习java的第一分钟里都会接触到这个问

  题,但是,你知道它到底发生发什么?

  JVM进程被启动,在同一个JVM进程中,有且只有一个进程,就是它自己。然后在这个JVM环境中,所有程序的运行都是以线程来运行。JVM最先会产生一个主线程,由它来运行指定程序的入口点。在这个程序中,就是主线程从main方法开始运行。当main方法结束后,主线程运行完成。JVM进程也随之退出。

  我们看到的是一个主线程在运行main方法,这样的只有一个线程执行程序逻辑的流程我们称

  之为单线程。这是JVM提供给我们的单线程环境,事实上,JVM底层还至少有垃圾回收这样的后台线程以及其它非java线程,但这些线程对我们而言不可访问,我们只认为它是单线程的。

  主线程是JVM自己启动的,在这里它不是从线程对象产生的。在这个线程中,它运行了main方法这个指令序列。理解它,但它没有更多可以研究的内容。

  [接触多线程]

 
  class MyThread extends Thread{
        public void run(){
            System.out.println("Thread say:Hello,World!");
        }
    }

    public class MoreThreads{
        public static void main(String[] args){
            new MyThread();
            new MyThread().start();
            System.out.println("Main say:Hello,World");
        }
    }


  执行这个程序,main方法第一行产生了一个线程对象,但并没有线程启动。

  main方法第二行产生了一个线程对象,并启动了一个线程。

  main方法第三行,产生并启动一个线程后,主线程自己也继续执行其它语句。

  我们先不研究Thread对象的具体内容,稍微来回想一下上面的两个概念,线程对象和线程。在JAVA中,线程对象是JVM产生的一个普通的Object子类。而线程是CPU分配给这个对象的一个运行过程。我们说的这个线程在干什么,不是说一个线程对象在干什么,而是这个运行过程在干什么。如果一时想不明白,不要急,但你要记得它们不是一回事就行了。

  累了吧?为不么不继续了?

  基于这种风格来介绍多线程,并不是每个人都喜欢和接受的,如果你不喜欢,正好不浪费你的时间了,而如果你接受的话,那就看下一节吧。
分享到:
评论
1 楼 xvnan 2009-03-13  
谢谢老师! 你写的真不错 很符合我们这些基础比较差的学生。

相关推荐

    多线程编程——MFC中的多线程开发

    多线程编程能够提高应用程序的效率和响应性,尤其是在进行耗时操作如网络通信、大数据计算或长时间的IO操作时。本篇文章将深入探讨MFC中的多线程开发,帮助初学者理解和掌握这一关键技能。 首先,我们需要了解多...

    Visual C++高级编程技术——MFC与多线程篇.rar

    理解多线程编程,包括线程同步、互斥量、事件和临界区的概念,是提升应用程序性能和响应能力的关键。 本教程可能涵盖以下主题: 1. MFC入门:介绍MFC的基本结构,如应用程序框架、文档/视图架构,以及如何创建简单...

    java多线程编程实战指南 核心篇 代码

    随着现代处理器的生产工艺从提升...《Java多线程编程实战指南(核心篇)》适合有一定Java语言基础的读者作为入门多线程编程之用,也适合有一定多线程编程经验的读者作为重新梳理知识结构以提升认知层次和参考之用。

    《Java语言程序设计——基础篇》第三章选择作业答案.zip

    《Java语言程序设计——基础篇》是Java语言的经典教材,中文版...《Java语言程序设计——基础篇》以示例讲解解决问题的技巧,提供大量的程序清单和相应的提示,每章配有大量复习题和编程练习题,帮助读者掌握编程技术。

    《Java语言程序设计——基础篇》第一章计算机、程序和Java概述作业答案.zip

    《Java语言程序设计——基础篇》是Java语言的经典教材,中文版...《Java语言程序设计——基础篇》以示例讲解解决问题的技巧,提供大量的程序清单和相应的提示,每章配有大量复习题和编程练习题,帮助读者掌握编程技术。

    《Java语言程序设计——基础篇》第五章方法示例.zip

    《Java语言程序设计——基础篇》是Java语言的经典教材,中文版...《Java语言程序设计——基础篇》以示例讲解解决问题的技巧,提供大量的程序清单和相应的提示,每章配有大量复习题和编程练习题,帮助读者掌握编程技术

    《Java语言程序设计——基础篇》第四章循环示例.zip

    《Java语言程序设计——基础篇》是Java语言的经典教材,中文版...《Java语言程序设计——基础篇》以示例讲解解决问题的技巧,提供大量的程序清单和相应的提示,每章配有大量复习题和编程练习题,帮助读者掌握编程技术。

    《Java语言程序设计——基础篇》第三章选择示例.zip

    《Java语言程序设计——基础篇》是Java语言的经典教材,中文版...《Java语言程序设计——基础篇》以示例讲解解决问题的技巧,提供大量的程序清单和相应的提示,每章配有大量复习题和编程练习题,帮助读者掌握编程技术。

    多线程编程之二——MFC中的多线开发

    在IT领域,多线程编程是一项关键技能,尤其是在开发高效、响应迅速的应用程序时。MFC(Microsoft Foundation Classes)是微软提供的一种C++类库,它简化了Windows应用程序的开发,包括多线程的支持。本篇文章将深入...

    《Java语言程序设计——基础篇》第二章基本程序设计示例.zip

    《Java语言程序设计——基础篇》是Java语言的经典教材,中文版...《Java语言程序设计——基础篇》以示例讲解解决问题的技巧,提供大量的程序清单和相应的提示,每章配有大量复习题和编程练习题,帮助读者掌握编程技术。

    多线程编程之二——MFC中的多线程开发

    在MFC(Microsoft Foundation Classes)框架中,多线程编程是一项关键能力,它允许程序同时执行多个任务,提高效率和响应性。本篇主要探讨MFC中的两类线程:工作者线程和用户界面线程。 工作者线程是不包含消息循环...

    Windows应用高级编程——C#编程篇1.pdf

    3. **多线程编程**:讲解如何在C#中实现并发编程,提高程序响应性和性能。 4. **文件与流操作**:学习如何读写文件、使用流进行数据传输等。 5. **数据库交互**:介绍ADO.NET框架,包括连接数据库、执行SQL语句等...

    net游戏编程源入门经典——C#篇

    《.NET游戏编程源入门经典——C#篇》是一本专为初学者设计的书籍,旨在引导读者通过C#语言进入游戏开发的世界。C#是.NET框架中的主要编程语言,尤其在游戏开发领域中有着广泛的应用,如Unity引擎就以其为首选语言。...

    Visual C++编程技巧典型案例解析——基础与应用篇(下)

    《Visual C++编程技巧典型案例解析——基础与应用篇(下)》是一本深入探讨Visual C++编程技术的专著,其主要目标是帮助开发者提升在实际项目中的编程技能和问题解决能力。书中涵盖了大量的实例源代码,使得学习者...

    Java语言程序设计——基础篇

    根据提供的信息,“Java语言程序设计——基础篇”这本书主要针对初学者介绍了Java编程的基础知识。虽然部分内容并未给出具体章节或细节信息,但基于书名、描述及常见的Java基础教程内容,我们可以推测书中涵盖的主要...

    java多线程基础篇讲解

    总之,Java多线程基础篇讲解涵盖了多线程编程的基本原理和实践,通过学习这些内容,开发者可以掌握如何在Java环境中创建和管理线程,以及如何优化多线程程序以充分利用系统资源,从而编写出高效的并发应用程序。

    Windows应用高级编程——C#编程篇.rar

    《Windows应用高级编程——C#编程篇》是一本专注于C#在Windows平台下进行高级应用程序开发的电子书。这本书可能是作者个人学习过程中积累的宝贵资料,现在分享出来供更多的人学习和参考。C#是一种由微软公司推出的...

    MFC多线程编程.pdf

    本篇内容将基于《MFC多线程编程.pdf》的部分内容,详细介绍多线程的概念、Win32 API对多线程的支持以及MFC框架下的多线程编程技巧。 #### 二、多线程基础理论 ##### 2.1 问题提出 以一个简单的例子开始——一个名为...

    linux_下多线程编程 C语言

    在Linux环境下,利用C语言进行多线程编程是一种常见的技术手段,它能够有效地提高程序的并发处理能力,充分利用现代多核处理器的计算资源。在本篇文章中,我们将深入分析一个多线程示例,并探讨其核心概念和技术细节...

    Windows应用高级编程 C#编程篇

    7. **多线程编程**:Windows应用中,多线程是提升性能和用户体验的重要手段。读者将学习如何创建和管理线程,以及同步和异步编程的概念。 8. **网络编程**:C#提供了丰富的网络编程接口,如TCP/IP、HTTP等。这部分...

Global site tag (gtag.js) - Google Analytics