Java基础知识10-多线程2

作者: 我相信你爱过gg | 来源:发表于2016-12-26 21:41 被阅读27次
    配图

    主线程

        当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.适合多个相同程序的代码去处理同一个资源的情况,把线程同程序的代码,数据有效的分离,较好的体现了面向对象的设计思想。

    相关文章

      网友评论

        本文标题:Java基础知识10-多线程2

        本文链接:https://www.haomeiwen.com/subject/kusdvttx.html