关于JAVA的多线程技术

时间:2022-06-28 05:35:39

关于JAVA的多线程技术

摘 要: 多线程技术是JAVA应用的主要技术,多线程具有并行机制、交互性能、实时控制等性能。主要的优势有提高界面程序响应速度和充分利用系统资源。通过使用线程,可以将需要大量时间完成的流程在后成;而通过在一个程序内部同时执行多个流程,可以充分利用CPU等系统资源,从而最大限度地发挥硬件的性能;在现在的项目开发中,多线程编程技术获得了广泛的使用。本文从线程概念、属性、实现方法、优劣势来介绍JAVA的多线程技术。

关键词: JAVA 多线程技术 属性 实现方式 优劣势

一、JAVA概述

JAVA是一种面象对象的、分布式的、解释的、键壮的、安全的、结构中立的、可移植的、多线程的、动态的的语言。

JAVA的设计思想是建立在当前大多数操作系统都实现了线程调度。JAVA虚拟机的很多任务都依赖线程调度,而且所有的类库都是为多线程设计的。多线程编程的含义是可将程序任务分成几个并行的子任务。

二、多线程技术

1.线程概述

一般来说,正在计算机中执行的程序叫做“进程”(Process)。所谓“线程”(Thread),是“进程”中某个单一顺序的控制流。

最简单的Applet也是由多个线程来完成的。在JAVA中,任何一个Applet的paint()和update()方法都是由AWT(Abstract Window Toolkit)绘图与事件处理线程调用的,而Applet主要的方法:init(),start(),stop()和destory()是由执行该Applet的应用调用的。

Unix操作系统和Microsoft Windows操作系统支持多用户、多进程的并发执行,而JAVA语言支持应用程序进程内部的多个执行线程的并发执行。

在一个多线程程序中,可以分配一个线程来读取数据,让另一个线程来处理数据,而让第三个线程把数据输送到图形卡上去。这三个线程可以并行运行。这样以来,在磁盘读取数据的同时仍然可以处理数据,从而提高了整体程序的性能。大量的示例程序都可以被设计来同时做两件事情以进一步提高性能。JAVA虚拟机(JVM)本身就是基于此原因广泛使用了多线程技术。例如:一个人在处理家务的过程中,将衣服放到洗衣机中自动洗涤后将大米放在电饭锅里,然后开始做菜,等菜做好了,饭就煮熟了,同时衣服也洗好了。

2.线程属性

为了正确有效地使用线程,我们必须理解线程的各个方面,并了解JAVA实时系统,必须知道如何提供线程体、线程的生命周期、实时系统如何调度线程、线程组、什么是幽灵线程。

(1)线程体(Thread Body)

所有的操作都发生在线程体中,在JAVA中线程体是从Thread类继承的run()方法,或实现Runnable接口的类中的run()方法。当线程产生并初始化后,实时系统调用它的run()方法。run()方法内的代码实现所产生线程的行为,它是线程的主要部分。

(2)线程状态

①新线程状态(New Thread)

产生一个Thread对象就生成一个新线程。当线程处于“新线程”状态时,仅仅是一个空线程对象,它还没有分配到系统资源。因此只能启动或终止它。任何其他操作都会引发异常。

②可运行状态(Runnable)

start()方法产生运行线程所必须的资源,调度线程执行,并且调用线程的run()方法。在这时线程处于可运行态。该状态不称为运行态是因为这时的线程并不总是一直占用处理机。特别是对于只有一个处理机的PC而言,任何时刻只能有一个处于可运行态的线程占用处理机。JAVA通过调度来实现多线程对处理机的共享。

③非运行状态(Not Runnable)

当以下事件发生时,线程进入非运行态。

suspend()方法被调用;

sleep()方法被调用;

线程使用wait()来等待条件变量;

线程处于I/O等待;

死亡态(Dead):当run()方法返回,或别的线程调用stop()方法,线程进入死亡态。

(3)线程的调度

线程调度是JVM对运行的多个线程进行系统级的协调,以避免多个线程争用有限资源而导致应用系统死机或者崩溃。

JAVA定义了线程的优先级策略。JAVA将线程的优先级分为10个等级,分别用1-10之间的数字表示。数字越大表明线程的级别越高。

为了控制线程的运行策略,JAVA定义了线程调度器来监控系统中处于就绪状态的所有线程。线程调度器按照线程的优先级决定那个线程投入处理器运行。在多个线程处于就绪状态的条件下,具有高优先级的线程会在低优先级线程之前得到执行。线程调度器同样采用“抢占式”策略来调度线程执行,即当前线程执行过程中有较高优先级的线程进入就绪状态,则高优先级的线程立即被调度执行。具有相同优先级的所有线程采用轮转的方式来共同分配CPU时间片。

(4)幽灵线程(Demon Thread)

任何一个JAVA线程都能成为幽灵线程。它是作为运行于同一个进程内的对象和线程的服务提供者。幽灵线程是应用中典型的独立线程。它为同一应用中的其他对象和线程提供服务。幽灵线程的run()方法一般都是无限循环,等待服务请求。

(5)线程组(Thread Group)

每个JAVA线程都是某个线程组的成员。线程组提供一种机制,使得多个线程集于一个对象内,能对它们实行整体操作。当线程产生时,可以指定线程组或由实时系统将其放入某个缺省的线程组内。线程只能属于一个线程组,并且当线程产生后不能改变它所属的线程组。

3.线程的实现

JAVA语言实现多线程应用程序的方法,根据多线程应用程序继承或实现对象的不同可以采用两种方式:一种是应用程序的并发运行对象直接继承java的线程类Thread;另一种方式是定义并发执行对象实现Runnable接口;即:一种是扩展java.lang.Thread类,另一种是通过java.lang.Runnable接口。

(1)继承Thread类来实现线程:

import.JAVA.awt.*;

public class wxy1

{public static void main(Stringargs)

{thread1 t1=new thread1(1); // 创建线程

thread1 t2=new thread1(2);

t1.start();t2.start();

}

}

class thread1 extends Thread// thread1类继承了Thread类

{ int d;

Mythread(int i)

{ d=i;}

public void run()

{ int i=0;

while(d+i==1)

{ try {sleep(1000);}

catch(InterruptedException e) {}

}

System.out.println("The d is "+d);

}

(2)以下代码是实现Runnable接口的实现多线程

import JAVA.applet.Applet;

import JAVA.awt.*;

public class wxy2 extends Applet implements Runnable// wxy2类继承了Applet实现Runnable

{ static int r=20;

static int x=80;

static int y=20;

Thread th;

public void init()

{th = new Thread(this);

th.start();

}

public void run()

{int y1=+1;

int i=1;

int sleeptime=10;

while(true)

{y+=(i*y);

if(y-rgetSize().height)

y1*=-1;

try{t.sleep(sleeptime);}

catch(InterruptedException e){ }

}}}

4.多线程的优劣势

多线程带来的更大的好处是更好的交互性能和实时控制性能。多线程技术使程序的响应速度更快;当前没有进行处理的任务可以将处理器时间让给其他任务;占用大量处理时间的任务可以定期将处理器时间让给其他任务;可以随时停止任务;可以分别设置各个任务的优先级以优化性能。缺点有:等候使用共享资源时造成程序的运行速度变慢;对线程进行管理要求的额外CPU开销;漫长的等待、浪费精力的资源竞争,以及死锁等多线程症状。

三、结语

本文讲述了Java多线程技术的几个方面,包括JAVA概述、多线程技术(线程概述、线程属性、线程实现和多线程的优劣势)。多线程的核心在于多个代码块并发执行,本质特点在于各代码块之间的代码是乱序执行的;多线程技术是JAVA的重要主要技术,Java语言对应用程序多线程能力的支持增强了Java作为网络程序设计语言的优势。

参考文献:

[1]王卫生.Java程序设计与实训教程[M].北京:北京理工大学出版社,2007:2.

[2]孟铂,樊新华.Java的多线程应用[J].电脑知识与技术(学术交流),2006,(23).

[3]贾兰兰.剖析JAVA语言的多线程[J].信息系统工程,2009,(6).

上一篇:电镀机器人抖振器设计与实现 下一篇:中学计算机教学探索