时间:2022-06-28 05:35:39
摘 要: 多线程技术是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).
关于畜牧业养殖 关于实习生工作计划 关于大学生活总结 关于大一学年个人总结 关于幼师实习工作报告 关于护理实习工作报告 关于未来的作文 关于坚持的作文 关于奉献的演讲稿 关于安全心得体会