Java基础知识10-多线程2

配图

主线程

    当java程序启动时,会立即运行一个线程,因为它是程序开始时执行的线程,所以这个线程通常称为程序的主线程。主线程很重要,有以下两个原因:
1.其他子线程都是从主线程产生的。
2.通常,主线程必须是最后才结束执行的线程,因为它需要执行各种关闭动作。
    尽管主线程是在程序启动时创建自动创建的,但是可以通过Thread对象对其进行控制。因此,必须调用currentThread()方法获取对主线程的一个引用。该方法是Thread类的公有静态成员。

    public static void main(String[] args) {

        Thread thread = Thread.currentThread();

        System.out.println(thread);

        thread.setName("My Thread");

        System.out.println(thread);
        
    }

上面代码执行结果如下

Thread[main,5,main]
Thread[My Thread,5,main]

默认情况下主线程的名称是main,线程优先级为5,并且main也是线程所属线程组的名称。在更改了线程的名称后,再次输出t,这一次将显示线程新的名称。

线程组是将一类线程作为整体来控制状态的数据。

创建线程(继承Thread类)

public class MyThread extends Thread {
    public MyThread(String name) {
        super(name);
    }
    @Override
    public void run() {
        for (int i = 0; i < 2000; i++) {
            System.out.println(i);
        }
    }
}

创建线程的第二种方式是创建一个扩展了Thread的新类,然后创建该类的实例。扩展类必须重写run()方法,run()方法是新线程的入口点。扩展类还必须调用start()方法以开始新线程的执行。

MyThread my1 = new MyThread("my-----------1");
MyThread my2 = new MyThread("my2");

my1.start();
my2.start();

注意MyThread类种的super方法的调用,这会给该线程指定线程名称。

run()方法和start()方法的区别

run():仅仅封装了线程的代码,直接调用相当于普通方法。
start():首先启动线程,然后jvm调用run()方法。

创建线程(实现Runnable接口)

创建线程最简单的方式是创建实现Runnable接口的类。Runnable接口抽象了一个可执行代码单元。可以依托任何实现了Runnable接口的对象来创建线程。为了实现Runnable接口,类只需要实现run()方法。

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println(Thread.currentThread().getName() + "--->" + i);
        }
    }
}

启动线程

new Thread(new MyRunnable(), "strMr1").start();
new Thread(new MyRunnable(), "strMr2").start();

第一个参数为:Runnable接口的实现类对象。
第二个参数为:线程名。

为什么需要有这两种方式

1.可以避免java单继承带来的局限性。
2.适合多个相同程序的代码去处理同一个资源的情况,把线程同程序的代码,数据有效的分离,较好的体现了面向对象的设计思想。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 线程概述 线程与进程 进程  每个运行中的任务(通常是程序)就是一个进程。当一个程序进入内存运行时,即变成了一个进...
    闽越布衣阅读 1,021评论 1 7
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,510评论 1 15
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 2,996评论 1 18
  • 前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要...
    嘟爷MD阅读 7,337评论 21 272
  • 似乎每个人都有那么几个不能分享的秘密。 “这简直是废话,秘密当然是不能分享的。” 但秘密之中,也有贫富贵贱的种姓等...
    Valkyrie阅读 265评论 0 1