Java Web知识java 一日俩坑Java基础

Java基础知识10-多线程2

2016-12-26  本文已影响27人  我相信你爱过gg
配图

主线程

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

上一篇下一篇

猜你喜欢

热点阅读