java之多线程

一、创建线程的方式

1、继承Thread类

实现方式很简单,只需要创建一个类去继承Thread类然后重写run方法,在main方法中调用该类实例对象的start方法即可实现多线程并发。

代码:

public class MyThread extends Thread {
    @Override
    public void run(){
        super.run();
        System.out.println("执行子线程...");
    }
}

测试用例:

public class Test {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
        System.out.println("主线程...");
    }
}

2、实现Runnable接口

这种方式的实现也很简单,就是把继承Thread类改为实现Runnable接口。

代码如下:

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("执行子线程...");
    }
}

测试用例:

public class Test {
    public static void main(String[] args) {

        Runnable runnable = new MyRunnable();
        Thread thread = new Thread(runnable);
        thread.start();
        System.out.println("主线程运行结束!");
    }
}

我只研究过这两种,因在实际开发中只用到了实现runnable这种方式,因此研究了一下区别。

继承Thread类也是实现了runnable接口,但区别在于继承Thread类的方法中,大多包含了关键字native。native 关键字告诉编译器(其实是JVM)调用的是该方法在外部定义的,使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。由于使用了这个关键字比较多,因此依赖于各种不同的平台,也就达不到跨平台的灵活性。

开发中大多数使用的是windows开发环境,而服务器中大多数是linux,属于跨平台了,如果你使用了继承Thread这种方式,需要对两种操作平台的熟悉,方可完全控制这个项目。

以上仅是个人学习过程中的一些观点,如有错误,欢迎大家指点一二,互相学习

原文地址:https://www.cnblogs.com/changyuyao/p/13490080.html