`
yesjavame
  • 浏览: 651174 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

多线程编程 基础篇 (一)

阅读更多

基础篇(一)

[写在前面]
随着计算机技术的发展,编程模型也越来越复杂多样化.但多线程编程模型是目前计算机
系统架构的最终模型.随着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

classBeginClass{
publicstaticvoidmain(String[]args){
for(inti=0;i<100;i++)
System.out.println("Hello,World!");
}
}


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

javaBeginClass
现在发生了什么呢?每一个java程序员,从他开始学习java的第一分钟里都会接触到这个问
题,但是,你知道它到底发生发什么?

JVM进程被启动,在同一个JVM进程中,有且只有一个进程,就是它自己.然后在这个JVM环境中,
所有程序的运行都是以线程来运行.JVM最先会产生一个主线程,由它来运行指定程序的入口点.在这个
程序中,就是主线程从main方法开始运行.当main方法结束后,主线程运行完成.JVM进程也随之退出.
我们看到的是一个主线程在运行main方法,这样的只有一个线程执行程序逻辑的流程我们称
之为单线程.这是JVM提供给我们的单线程环境,事实上,JVM底层还至少有垃圾回收这样的后台线程以
及其它非java线程,但这些线程结我们而言不可访问,我们只认为它是单线程的.

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

[接触多线程]

classMyThreadextendsThread{
publicvoidrun(){
System.out.println("Threadsay:Hello,World!");
}
}

publicclassMoreThreads{
publicstaticvoidmain(String[]args){
newMyThread();
newMyThread().start();
System.out.println("Mainsay:Hello,World");
}
}

执行这个程序,main方法第一行产生了一个线程对象,但并没有线程启动.
main方法第二行产生了一个线程对象,并启动了一个线程.
main方法第三行,产生并启动一个线程后,主线程自己也继续执行其它语句.

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

累了吧?为不么不继续了?
基于这种风格来介绍多线程,并不是每个人都喜欢和接受的,如果你不喜欢,正好不浪费你的
时间了,而如果你接受的话,那就看下一节吧.

分享到:
评论

相关推荐

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

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

    多线程编程实战指南-核心篇

    java多线程编程指南核心篇,各人觉得并发编程的艺术看起来更枯燥,还是实战带感,当然,有基础的话更容易些

    Java多线程编程实战指南-设计模式篇

    随着CPU 多核时代的到来,多线程编程在充分利用计算资源、提高软件服务质量方面扮演了越来越重要的角色。...《Java多线程编程实战指南(设计模式篇)》适合有一定Java 多线程编程基础、经验的读者。

    .NET多线程编程(1):多任务和多线程

    首先我将在本篇文章的开始向大家介绍多线程的有关概念以及多线程编程的基础知识;在接下来的文章中,我将逐一讲述。NET平台上多线程编程的知识,诸如System.Threading命名空间的重要类以及方法,并就一些例子程序来作...

    Java多线程之基础篇(一).docx

    与此相反,像java所使用的这种并发系统会共享内存或I/O这样的资源,因此编程编写多线程程序最基本的困难在于,协调不同线程驱动的任务之间这些资源的使用,以便使得这些资源不会同时被多个任务访问。

    .net 线程详解 基础篇

    WinForm多线程编程篇 * 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? * Invoke,BeginInvoke干什么用的,内部是怎么实现的 * 每个线程都有消息队列吗? * 为什么Winform不允许跨线程...

    . NET C#多线程编程专门教程

    首先我将在本篇文章的开始向大家介绍多线程的有关概念以及多线程编程的基础知识;在接下来的文章中,我将逐一讲述.NET平台上多线程编程的知识,诸如System.Threading命名空间的重要类以及方法,并就一些例子程序来作说明...

    Java多线程之基础篇(二).docx

    与此相反,像java所使用的这种并发系统会共享内存或I/O这样的资源,因此编程编写多线程程序最基本的困难在于,协调不同线程驱动的任务之间这些资源的使用,以便使得这些资源不会同时被多个任务访问。

    .Net 多线程详解

    WinForm多线程编程篇 • 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? • Invoke,BeginInvoke干什么用的,内部是怎么实现的 • 每个线程都有消息队列吗? • 为什么Winform不允许跨...

    java_多线程开发

    java_多线程开发 分为: 多线程编程——基础篇 多线程编程——实战篇

    深入浅出Win32多线程程序设计[收集].pdf

    深入浅出Win32多线程程序设计[收集].pdf

    C#网络编程高级篇之网页游戏辅助程序设计

    《c#网络编程高级篇之网页游戏辅助程序设计》涉及的领域包括多线程编程技术、socket套接字编程、tcp协议编程、http协议编程、远程控制技术、木马技术、模拟键盘和鼠标技术、网页游戏辅助程序设计技术等。...

    权威.NET多线程详解(源码示例)

    WinForm多线程编程篇 • 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? • Invoke,BeginInvoke干什么用的,内部是怎么实现的 • 每个线程都有消息队列吗? • 为什么Winform不允许跨...

    Java实验6多线程.doc

    本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。

    python 零基础学习篇多任务编程线程2 多线程的使用 .mp4

    python 零基础学习篇

    C++编程基础知识概述

    C++是一种强大且广泛使用的编程语言,用于开发各种应用程序,从系统级应用到图形用户界面。...如果您想更深入地学习C++,可以探索面向对象编程、模板编程、多线程编程等更高级主题,以充分利用这门强大的编程语言。

    c# 多线程编程 入门篇

    多线程应该是编程工作者的基础技能, 但这个基础对我来讲的确有点难(起码昨天以前是这样).

    读书笔记-Java并发编程实战-基础篇

    读书笔记-Java并发编程实战-基础篇

    老王Python基础+进阶+项目篇(高清无密)

    基础篇18-基础篇综合习题 基础篇19-python语句与数据结构应用 基础篇20-python函数 基础篇21-文本操作应用 基础篇22-文本操作应用解答 老王Python教程 进阶篇 进阶篇1-进阶篇承上启下 进阶篇2-函数第一节 进阶篇3-...

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

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

Global site tag (gtag.js) - Google Analytics