Java线程及其创建

本文详细介绍了Java中线程的基本概念,包括Thread类、Runnable接口及其使用方式,并通过两个示例展示了如何创建和启动线程。文章还对比了通过继承Thread类和使用Runnable接口创建线程的优缺点。

Java语言的一个重要功能特点就是内置对多线程的支持,它使得编程人员可以很方便地开发出具有多线程功能,能同时处理多个任务的功能强大的应用程序。

 

Thread类及Runnable接口

 

可以将一个线程理解成以下三个部分的组合。

1CPU:虚拟的CPU,专门用于执行该线程的任务。

2Code:代码,即线程中要执行的指令,在程序中表现为特定的方法。

3Data:数据,即线程中要处理的数据,在程序中表现为变量。

 

Java中,有java.lang.Thread类来实现线程的概念,其中:

虚拟的CPU,由java.lang.Thread类封装和虚拟;CPU所执行的代码,在构造Thread类时,传递给Thread类对象。CPU所处理的数据,在构造Thread类时,传递给Thread类对象。

为了构造一个Thread类,可以向Thread的构造函数传递一个Runnable对象,这个对象就是线程所需要的代码和数据的封装。

Runnable对象是指实现了java.lang.Runnable接口的任何对象,Runnable接口只有一个方法:

public void run();

这个run()方法实际上就是线程所要执行的代码。

要启动线程中的代码,只需要执行Thread类的start()方法,则系统会在可能的情况下去执行run()方法中所规定的代码。

 

 

创建线程对象的两种方法

创建线程对象,要传递代码与数据,而传递代码与数据有两种方法,一是通过继承Thread类,一是向Thread类传递一个Runnable对象。

 

1.通过继承Thread类创建线程

Thread派生一个新类,在其中加入属性及方法,同时覆盖run()方法。当创建这样一个派生类的新对象后,使用start()方法,即可启动该线程。

 

1 TestThread1.java简单的线程

public class TestThread1 {
    public static void main(String[] args) {
        Thread t = new MyThread();
        t.start();
    }
}

class MyThread extends Thread {
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.print(" " + i);
        }
    }
}

在程序中通过继承,定义了MyThread类。用new创建了一个线程实例,用start()方法进行启动,程序结果如下图所示。


 

2.通过向Thread()构造方法传递Runnable对象来创建线程

通过向Thread()构造方法传递Runnable对象来创建线程,是第二种方法。

 

2 TestThread2.java实现Runnable

public class TestThread2 {
    public static void main(String[] args) {
        MyTask mytask = new MyTask(100);
        Thread thread = new Thread(mytask);
        thread.start();
    }
}

class MyTask implements Runnable {
    private int n;
    public MyTask(int n) {
        this.n = n;
    }
    public void run() {
        for (int i = 0; i < n; i++) {
            System.out.print(" " + i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {}
        }
    }
}

运行结果如下图所示。

 


该程序定义了一个类MyTask,它实现了Runnable接口,也就是说,它含有public void run()方法。在创建线程时,先创建一个MyTask对象,再将此对象作为Thread构造方法的参数。

 

3.两种方法的比较

直接继承Thread类,这种方法的特点是:编写简单,可以直接操作线程;但缺点也是明显的,因为若继承Thread类,就不能在从其他类继承。

 

使用Runnable接口,这种方法的特点是:可以将Thread类与所要处理的任务的类分开,形成清晰的模型;还可以从其他类继承。

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值