线程的简单使用

一、 概念讲解

java中很重要的一个概念就是线程,在很多实际的应用中都会用到这项技术,咱们先来看一下线程这个概念是什么意思。要说线程,就要先说说进程。什么是进程呢,进程就是在内存中运行的一个程序块,比如在windows系统中的很多软件,如用的很多的QQ,酷狗等软件,这些程序在内存中运行就是一个进程,进程是系统分配资源和调用的基本单位。在进程中有很多执行流程,这些流程就是线程,一个进程包含一个或多个线程。举个例子,比如说当你用酷狗音乐听音乐时,你想下载一首歌,这时候你可以一边听音乐一边下载歌曲,给人的感觉是这两个任务是“同时”执行的(懂计算机的朋友都知道这不是同时的,是cpu调用线程的算法),这两个任务都是酷狗这个进程大任务的子任务,这个很好理解,就是大任务是由更小的任务组成的,这就是线程和进程之间的关系。

二、线程的基本使用

在java中使用线程有两种基本的方式,一种是继承Thread这个类,一种是实现Runnable这个接口,实质上这两种方式是一样的,因为Thread这个类也是实现了Runnable这个接口(想了解的朋友可以查阅相关JDk源码,另外这里很模糊的涉及到了一种设计模式:包装模式,这部分内容我会在其它文章中总结出来),下面咱们具体看看这两种使用线程的方法:

1.继承Thread这个类

先看一下具体的代码,下面这段代码实现的是在控制台不停得输出一个递加的整形数字:

import java.lang.Thread;

public class MyThread extends Thread{
    int i=0;
    public void run(){
        while(true){
            System.out.println(i);
            i++;
        }
    }

    public static void main(String[] args) {
        MyThread mythread=new MyThread();
        mythread.start();
    }
}

MyThread这个类是咱们自己定义的一个类,这个类继承了Thread这个类,从导入的包来看Thread这个类是在java.lang这个包下面。MyThread这个类中出了主函数外还有一个run函数,我们发现这个函数中有具体的执行代码,没错,线程要执行的就是run函数内部的代码,但是在主函数中没有发现调用这个函数的痕迹啊,这是为什么呢?没有调用run()函数,但是有一个调用start()函数的语句,这时咱们就可以猜测是start()函数里面又调用了run()函数,先不管这个猜测是不是对的,反正这个程序正确执行了,更具体更深入的原理我会在后续的文章中分享给大家,大家先记住这种使用线程的方法。再看一下主函数,在主函数里实例化了咱们自己定义的类MyThread,然后通过类对象调用了start()函数,这里说明一下,MyThread继承了Thread,它本身就是一个Thread,只是名字不同罢了,这样就可以理解了,它本身就是一个Thread,所以它调用的是Thread类的函数start()来启动了线程,程序会自动去执行run函数里面的代码。

2.实现Runnable接口
import java.lang.Thread;
public class MyThread implements Runnable{
    int i=0;
    public void run(){
        while(true){
            System.out.println(i);
            i++;
        }
    }

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

上面这段代码是实现了Runnable这个接口,大家可以发现一点相同和一点不同,相同处就是都有一个run函数,不同点是主函数里的代码。先说相同点,不管是继承还是接口,都会有run函数,run函数里面是线程执行体,启动线程都是调用start()函数。主函数里面实例化了一个Thread类,然后把咱们定义的类的一个对象当做参数传给了它,这里的参数就是实现了Runnable接口的类的对象,其实java中使用接口的类都可以这样写来使用接口中的方法,当然了,程序是正确执行的,结果和继承方法是完全一样的。这两种方法各有利弊,使用继承之后,就不能继承其它类了,要使用其它类的方法就只能使用接口了;使用接口的话,还可以继承其它类,到底该怎么选择就看自己的实际需求了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值