Java多线程技术及案例

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java多线程技术及案例

进程和线程:

进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。

线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。

线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。

多进程是指操作系统能同时运行多个任务(程序)。

多线程是指在同一程序中有多个顺序流在执行。

Java中多线程的多种实现方式

Java中有多种多线程实现方法,主要是继承ng.Thread类的方法和

ng.Runnable接口的方法。

继承Thread类

Thread是ng包中的一个类,从这个类中实例化的对象代表线程,启动一个新线程需要建立一个Thread实例。

使用Thread类启动新的线程的步骤如下:

1.实例化Thread对象

2.调用start()方法启动线程

构造方法:

public Thread(String threadName);

public Thread();

例程:

publicclass Thread1extends Thread{//定义一个类继承Thread privateint count=1000;

publicvoid run(){//重写run方法

while(true){

System.out.print(count+" ");

if(--count==0){

return;

}

}

}

publicstaticvoid main(String[] args){

Thread1 th1=new Thread1();//实例化继承了Thread的类 Thread1 th2=new Thread1();

th1.start();//调用start()方法,

th2.start();

for(int i=0;i<1000;i++){

System.out.print("A ");

}

}

}

以上例子中,Thread1继承了Thread并重写了run()方法,在主程序中,首先实例化Thread1对象,然后调用start()方法运行run()方法。另外主程序本身是一个线程,再调用两个新线程,根据打印数据,可以看到数字和字母交替输出,而且两组数字序列也穿插出现,说明三个线程都在同步运行。

Java中所有的线程都是同时启动的,至于什么时候,哪个先执行,完全看谁先得到CPU的资源。

另外,在java中,每次程序运行至少启动2个线程。一个是main线程,一个是垃圾收集线程。因为每当使用java命令执行一个类的时候,实际上都会启动一个JVM,每一个JVM就是在操作系统中启动了一个进程。

Runnable接口

实现Runnable接口程序会创建一个Thread对象,并将Runnable对象与Thread对象相关联。

使用Runable接口启动新的线程的步骤如下:

1.建立实现Runnable接口的类

2.使用参数为Runnable对象的构造方法创建Thread实例

3.调用start()方法启动线程

构造方法:

public Thread(Runnable r);

public Thread(Runnable r,String name);

例程:

class Thread2implements Runnable{

private String name;

public Thread2(String name) {

=name;

}

@Override

publicvoid run() {

for (int i = 0; i <5; i++) {

System.out.println(name + "运行 : " + i);

}

}

}

publicclass Main {

publicstaticvoid main(String[] args) {

new Thread(new Thread2("C")).start();

//new Thread2("C")创建的是Runnable对象,new Thread(new Threa d("C"))是实例化与Runnable对象相关联的Thread对象

new Thread(new Thread2("D")).start();

}

}

上例主程序中,new Thread2(“C”)创建的是Runnable对象,new Thread(new Thread(“C”))是实例化与Runnable对象相关联的Thread对象。

Thread2类通过实现Runnable接口,使得该类有了多线程类的特征。run方法是多线程程序的一个约定。所有的多线程代码都在run方法里面。

Thread和Runnable的区别与联系

联系:

我们可以发现,无论是Thread还是Runnable方法,都有run方法和start方法,而且Runnable方法使用首先需要通过构造方法把Runnable对象和Thread对象的联结,这是因为实际上,Thread也是实现了Runnable接口的类。

run是Runnable接口的方法,包含着该线程的程序代码。

start是Thread类的方法,它调用Thread对象所实现的Runnable接口中的run方法代码块。

所有的多线程代码都是通过运行Thread的start()方法来运行的。因此,不管是扩展Thread 类还是实现Runnable接口来实现多线程,最终还是通过Thread的对象的API来控制线程的,熟悉Thread类的API是进行多线程编程的基础。

区别:

作为编程语言这样的人造物,与其问区别不如问为什么存在。为什么并存继承Thread类和实现Runnable接口两种多线程方法?

这主要是因为接口的独特优势。

相关文档
最新文档