进程(Process),简单地讲,就是在操作系统中运行着的任务。比如,我们打开一个word,那我们就是操作系统当中运着着一个进程,打开一个excel,那在操作系统当中就运行着一个进程。而线程(Thread)是在同一应用程序中有多个顺序流(同时)执行,它是进程的实体,一个进程可以拥有多个线程,线程必须有一个父进程。一般情况下,线程具有就绪、阴塞、运行三个基础状态。对于单核CPU的系统上,在某一个时间刻,后台只有一条线程在执行着。

一、线程的实现可以有两种方式,第一种是继承Thread,第二种是实现Runnable接口1、继承Thread
程序代码
package zizz
;/**
* 使用继承方式的线程实现.
*
*
@author <a href="http://www.suneca.com">zizz</a>
*
*
@Create-Time:2008 下午10:25:33
*/public class MyThread
extends Thread
{ public MyThread
(){ } public void run
() { System
.out
.println
("线程运行。。"); } public static void main
(String
[] args
){ //创建一个线程实例 MyThread
thread
= new MyThread
(); //线程进入运行态 thread
.start
(); }}
线程的启动不是程序直接去调用run()方法,而是调用start(),因为线程在什么时候运行,完全是由线程调度器进行决定!
2、实现Runnable接口
程序代码
package zizz
;/**
*
使用实现Runnable接口的线程.
*
* @author <a href='http://www.suneca.com'>ZIZZ</a>
*
*
@Create-Time:2008 下午10:48:31
*/public class MyRunnable
implements Runnable
{ public void run
() { System
.out
.println
("线程运行。。。"); } public static void main
(String
[] args
){ //构造一个Runnable的实例 MyRunnable
runnable
= new MyRunnable
(); //创建新的线程 Thread
thread
= new Thread
(runnable
,"T1"); //线程启动. thread
.start
(); }}
Runnable实例的启动不是直接调用run()方法,它需要由一个Thread作为它的载体!
二,多线程
线程的执行是由进程调度器进行调度的,线程在运行时,线程调度器会让线程由运行态转化为阻塞状态,对于线程它是如何运行,线程之间如何去抢夺CPU资源,我们无法控制,以下的例子创建了两条线程,并且这两条线程同时起动。
程序代码
package zizz
;/**
* 使用继承方式的线程实现.
*
*
@author <a href="http://www.suneca.com">zizz</a>
*
*
@Create-Time:2008 下午10:25:33
*/public class MyThread
extends Thread
{ public MyThread
(){ } public MyThread
(String name
){ super(name
); } public void run
() { //循环输出1 到 100 for(int i
=1
;i
<=100
;i
++){ System
.out
.println
(this.getName
() + " : " + i
); } } public static void main
(String
[] args
){ //创建一个线程实例 MyThread
t1
= new MyThread
("T1"); MyThread t2
= new MyThread
("T2"); //线程进入运行态 t1
.start
(); t2
.start
(); }}
控制台的输出结果为:

从结果当中我们可以看到,在多线程的应用程序当中,线程如何调用,是由虚拟机决定的。
注意:如果你的操作量太少,比如循环次数太少,那你可以看不到这个效果!
三、sleep
当我们线程执行完某一操作之后,要求先停下来,之后才继续进行,那此时我们将需要让线程休眠,由运行态转为可阻塞状态。比如,我们现在要编写一个每隔一秒钟输入一个数字,输出的数字是从100到999,那我们可以每输出一个数字之后,让线程休眠,由运行态转化为阻塞状态。
程序代码
package zizz
;/**
* 使用继承方式的线程实现.
*
*
@author <a href="http://www.suneca.com">zizz</a>
*
*
@Create-Time:2008 下午10:25:33
*/public class MyThread
extends Thread
{ public MyThread
(){ } public MyThread
(String name
){ super(name
); } public void run
() { //循环输出1 到 100 for(int i
=100
;i
<=999
;i
++){ System
.out
.println
(i
); try { //线程休眠,由运行态转化为阻塞状态 sleep
(1000
); } catch (InterruptedException e
) { e
.printStackTrace
(); } } } public static void main
(String
[] args
){ //创建一个线程实例 MyThread
t1
= new MyThread
("T1"); //线程进入运行态 t1
.start
(); }}
sleep(1000)表示线程休眠1秒钟!那线程休眠一秒钟之后是否马上就进入运行状态呢?不是的!从线程状态图我们可以看到,线程由阻塞状态并不是马上就进入运行状态,而是先进入可运行态,最后,由线程调度器进行调度。所以我们实现这个代码,严格来讲,是错的!谁也没有办法确保就刚好是一秒钟的时间输出一次!因为对于JAVA来讲,它也是运行于操作系统上的一个进程,操作系统此时有很多进程都是处于运行态!
相关推荐
验证数据输入管理错误和处理异常使用垃圾回收来管理内存资源使用泛型,构建新的类型,创建可重用的组件使用LINQ和ADO.NET来查询和操作数据深入探索任务并行库中的多线程支持使用WindowsCornmurllcatior1Foundation来...
《Visual C# Step by Step (中文版)》是一本针对初学者至中级程序员设计的教程,旨在帮助读者全面掌握Visual C#编程语言。这本书详细介绍了如何使用Microsoft的Visual Studio开发环境,尤其是针对C#语言的功能和特性...
### 《Assembly Language Step-by-Step》知识点梳理 #### 一、书籍基本信息 - **书名**:《Assembly Language Step-by-Step》 - **作者**:Jeff Duntemann - **出版社**:Wiley Publishing, Inc. - **出版年份**:...
《Assembly Language Step-by-Step: Programming with Linux》(第三版)是一本深入讲解汇编语言及其在Linux环境下的应用的专业书籍。本书由Jeff Duntemann编写,并于2009年由Wiley出版社出版。该书不仅适合初学者...
《C# Step By Step 2010》是一本针对初学者至中级程序员的C#编程教程,通过逐步学习的方式,全面介绍了Visual C# 2010的使用技巧和核心概念。这本书覆盖了从基础语法到高级特性的广泛主题,旨在帮助读者深入理解和...
《Microsoft Visual C# 2008 Step by Step》是一本专为初学者设计的C#编程教程,它深入浅出地介绍了C#语言的基础知识和.NET Framework的应用。这本书不仅涵盖了编程的基本概念,还提供了丰富的实例,使得学习者能够...
《ASP.NET 4.0 Step by Step》是一本由George Shepherd撰写的书籍,由Microsoft Press出版。本书详细介绍了最新的ASP.NET 4.0技术,并通过一系列循序渐进的教程帮助读者深入理解并掌握该技术。对于想要学习或提升ASP...
本文将基于提供的标题“VxWorks调试 step by step”以及描述,深入探讨VxWorks调试的过程,并结合可能包含的文档资源,如“打通VxWorks调试环境 Step by Step.doc”和“20087108422323967.pdf”,提供详尽的知识点...
《Visual C# 2010 Step By Step》是一本深受程序员喜爱的教程书籍,它详细介绍了Microsoft的C#编程语言在2010版本中的使用。这本书通过一系列的实践步骤,帮助读者从零基础逐步掌握C#编程,涵盖了语言基础、面向对象...
《Visual C# 2010 Step by Step》是一本由John Sharp编写的书籍,旨在为初学者和有经验的开发者提供深入理解Microsoft Visual C# 2010的全面指南。本书由Microsoft Press出版,作为Microsoft Corporation的一个部门...
1. **基础语法**:Java的基础语法与C++和C#有很强的相似性,包括变量声明、数据类型(如int、double、boolean等)、控制结构(如if语句、for循环、while循环)以及方法定义。 2. **类与对象**:在Java中,一切皆为...
《VC++.NET Step by Step》是一本针对微软的Visual C++ .NET编程环境的逐步学习指南。这本书通过一系列章节,详细介绍了如何使用这个强大的开发工具进行应用程序开发。压缩包中的文件名代表了书籍的不同章节,这表明...
从给定的文件信息来看,我们讨论的主题是“Microsoft Visual Basic 2008 Step by Step”,这是一本由Michael Halvorson编写的书籍,由Microsoft Press出版,于2008年发行。本书旨在为读者提供逐步学习Visual Basic ...
《Visual C# 2010 Step by Step》是一本专为初学者和有经验的开发者设计的教程,旨在帮助读者全面掌握C#编程语言及其在.NET Framework 4.0环境下的应用。这本书通过逐步指导的方式,深入浅出地讲解了C# 2010的各种...
《VC++.net_Step_by_Step.rar》是一个深入学习Visual C++.net的教程资源,它旨在引导初学者从基础的控制台程序开发逐渐过渡到更高级的Windows SDK控制编程,最终掌握MFC(Microsoft Foundation Classes)框架的应用...
《Visual C# 2010 Step By Step》是一本专为初学者和有一定编程基础的读者设计的教程书籍,其随书代码是学习过程中的重要辅助资源。这本书旨在通过逐步指导的方式,帮助读者深入理解和掌握Visual C# 2010这门编程...
VB教程Step by Step是针对初学者的一套详细指导,旨在帮助读者逐步掌握Visual Basic (VB)编程语言。VBScript虽然在名称中提及,但这里主要讨论的是VB,它是一种基于事件驱动的编程语言,广泛应用于Windows应用程序...
### Microsoft Visual Basic 2010 Step by Step #### 知识点概览 - **基础知识**:介绍Visual Basic 2010的基础概念、安装配置及开发环境。 - **编程基础**:涵盖变量、数据类型、流程控制(条件语句、循环)、函数...