C/C++ 狂野架构师 -->
  • 精品课程
  • 免费教程
  • 教研团队
  • 开班时间
  • 报考大学
  • 学员社区
  • AI智能应用开发 AI大模型开发(Python) AI鸿蒙开发 AI嵌入式+机器人开发 AI运维 AI测试 跨境电商运营 AI设计 AI视频创作与直播运营 微短剧拍摄剪辑 C/C++ 狂野架构师

    Java基础教程:多线程(2)-----创建线程的第一种方式

    更新时间:2017年11月14日15时42分 来源:乐鱼播客 浏览次数:

    在Java中,实现多线程操作有两种方式,一种是继承java.lang包下的Thread类,覆写Thread类的run()方法,在run()方法中实现运行在线程上的代码。另一种就是实现java.lang.Runnable接口,同样是在run()方法中实现运行在线程上的代码。两种方式的区别在于,继承Thread类可以直接启动线程,实现Runnable接口不能直接启动线程,需要先创建Thread类的实例对象,通过Thread类的构造方法传入实现了Runnable接口的实例对象,然后通过Thread类来启动线程。因此,这两种方式都会用到Thread类,由此可见该类在多线程中的重要性,接下来就通过一些实例针对Java中多线程的两种创建方式分别进行讲解,并比较它们的优缺点。

    创建线程的第一种方式----继承Thread类,代码如下所示:

    public class Example02 {

    publicstatic void main(String[] args) {

    Clientt2=new Client();

    t2.start();

    while(true) {

    System.out.println(Thread.currentThread().getName()

    +"................... Client2 is running");

    }

    }

    }

    class Client extends Thread {

    publicvoid run() {

    while(true) {

    System.out.println(Thread.currentThread().getName()

    + "...................Client1 isrunning");

    }

    }

    }

    例程中,Client类继承了Thread类,也就具有了Thread类的全部特点,在main()方法中创建Client的实例对象,并调用从Thread类继承的start()方法开启线程,两个while循环处的代码交替运行。为了方便看出哪个线程正在运行,可以通过Thread.currentThread().getName()方法获得当前线程的名称,默认情况下,主线程的名称为main,用户启动的多条线程的名称依次为Thread-0、Thread-1、Thread-2……Thread-n等。接下来通过单线程和多线程运行的流程图来说明它们的区别,如下图所示。

    从图中可知,单线程中,main()方法必须等到Client的print()方法返回后才能继续运行,而在多线程中,main()方法和Client的run()方法运行在各自的线程中,互不影响。这就好比一个1G的CPU分成了两个500M的CPU,在一个CPU上运行main()方法,另一个CPU上运行Client的run()方法。

    大家可能会有这样的疑问:程序没有直接调用Client对象的run()方法,而是调用了该对象从Thread类继承来的start()方法,那为什么会执行run()方法呢? 这是因为start()方法有两个作用,一是开启一个新的线程,二是调用Thread子类对象的run()方法。如果直接调用线程对象的run()方法,线程对象只是一个普通类的实例对象,新的线程并没有开启,run()方法中的代码也只会在主线程中执行。

    友情提示:获得更多学科学习视频+资料+源码,请加QQ:3276250747。

    本文版权归乐鱼播客java学院所有,欢迎转载,转载请注明作者出处。谢谢!


    相关教程
    java多线程一:多线程概念
    java多线程二:创建线程的第一种方式
    java多线程三:创建线程的第二种方式
    java多线程四:线程的生命周期
    java多线程五:线程的调度之优先级
    作者:乐鱼播客java学院
    首发:http://java.itcast.cn/
    0 分享到:
    在线咨询 我要报名
    和我们在线交谈!
    【网站地图】【sitemap】