一、创建线程的方式
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这种方式,需要对两种操作平台的熟悉,方可完全控制这个项目。
以上仅是个人学习过程中的一些观点,如有错误,欢迎大家指点一二,互相学习