您的位置:首页 > 编程语言 > Java开发

Java多线程详解

2015-10-31 16:55 447 查看
Java提供了对多线程编程的内置支持。多线程程序中包含可以同时运行两个或多个部分。这样一个程序的每个部分称为一个线程,每个线程定义一个单独的执行路径。

多线程是多任务的一种特殊形式。多线程需要比多任务处理开销更少。

需要定义其他术语相关:线程进程。进程包括操作系统,它可以包含一个或多个线程分配的内存空间。线程不能单独存在,它必须是一个进程的一部分。一个进程仍然在运行,直到所有的非守护线程都执行完毕。

多线程能够编写非常高效的程序,最大限度地利用CPU,因为空闲时间可以保持在最低限度。

线程的生命周期:

一个线程经历在其生命周期的不同阶段。例如,一个线程产生,开始,运行,然后死亡。下图显示了一个线程的整个生命周期。



上述阶段进行了说明:

New: 一个新的线程开始在新的状态的生命周期。它仍然在此状态,直到程序启动的线程。它也被称为出生线程。

Runnable: 经过一个新生的线程启动时,该线程进入可运行状态。处于这种状态的线程将被视为执行其任务。

Waiting: 有时候,一个线程转换到等待状态,而线程等待另一个线程来执行任务。一个线程转换回可运行状态,只有当另一个线程发出信号的等待线程继续执行。

Timed waiting: 可运行的线程可以输入指定的时间间隔定时等待状态。处于这种状态的线程转换回可运行状态时的时间间隔期满时或在等待事件发生。

Terminated: 可运行的线程进入终止状态,当它完成了自己的任务,否则终止。

线程的优先级:

每一个Java线程都有一个优先级,可以帮助操作系统决定哪个线程预定的顺序。

Java优先级是在MIN_PRIORITY(常数1)和MAX_PRIORITY(常数10)之间的范围内。默认情况下,每个线程优先NORM_PRIORITY(常数5)。

线程具有更高的优先级是比较重要的一个程序和低优先级的线程之前应该分配处理器时间。但是,线程优先级不能保证哪个线程的执行顺序和非常依赖平台。

创建线程:

Java定义在此可以完成两种方式:

可以实现Runnable接口。

可以扩展Thread类本身。

通过实现Runnable创建线程:

创建一个线程,最简单的方法是创建一个实现Runnable接口的类。

为了实现Runnable,这个类需要实现只有一个单一的方法 run(),它是这样声明的:

public void run( )

定义构成新线程 run()方法的代码内部。重要的是要明白的run()可以调用其他方法,使用其他类,并声明变量,就像主线程可以是很重要的。

当创建一个实现Runnable类,会从类中实例化线程的对象。线程定义了多个构造函数。我们将使用一个如下所示:

Starting hello thread...
Starting goodbye thread...
Hello
Hello
Hello
Hello
Hello
Hello
Goodbye
Goodbye
Goodbye
Goodbye
Goodbye
.......

主要线程概念:

多线程编程,需要具备以下概念非常必要:

线程同步

线程间通信

线程死锁

线程控制:暂停,停止和恢复

使用多线程:

有效地利用多线程支持的关键是同时,而非串行。例如,当有一个程序,可以并发执行中两个子系统,使它们各个线程运行。

只要仔细地使用多线程,可以创建非常高效的程序。要注意的是:如果你创建了太多的线程,可以实际降低程序的性能,而不是提高它。

请记住,一些开销与上下文切换有关。如果创建了太多的线程,更多的CPU时间会花在不断变化的环境不是执行程序!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: