java中创建线程的两种方式有啥区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中创建线程的两种方式有啥区别相关的知识,希望对你有一定的参考价值。
java中创建线程的两种方式有什么区别
参考技术A 一种是继承 Thread 类,一种是 实现Runnable 接口,需要重写或者实现 run()方法。没啥区别,因为java是单继承的,所以不可能让所有的类都继承Thread类,所以必须有这个Runnable 接口。
一般来说编程都会去 实现Runnble 接口,而不会采用继承Thread。
Java 中创建线程的两种方法实现
创建线程的两种方法:
- 继承Thread类,重写run方法
- 实现Runnable接口,重写run方法
一、继承Thread类,创建子线程
我们通过编写一个程序,来理解通过继承Thread类,来创建子线程
开启一个线程,在控制台输出“"喵喵,我是小猫咪”,当输出8次,结束该线程
具体代码如下,注释已经代码中给出,可以体会一下
public class Thread1
public static void main(String[] args) throws InterruptedException
//创建Cat对象,可以当做线程使用
Cat cat = new Cat();
/*
public synchronized void start()
start0();
start0()是本地方法,是JVM调用,底层是c/c++实现
//真正实现多线程的效果,是start0,而不是run
*/
cat.start(); //启动线程 ->最终会执行cat的run方法
System.out.println("主线程继续执行:" + Thread.currentThread().getName()); //线程名main
for (int i = 0; i < 10; i++)
System.out.println("主线程 i=:" + i);
//让主线程休眠
Thread.sleep(1000);
//1.当一个类继承了Thread类,该类就可以当做线程来使用
//2.我们会重写run方法,写了自己的业务代码
//3.run() 是Thread类,实现了Runnable接口的run方法
/*
@Override
public void run()
if (target != null)
target.run();
*/
class Cat extends Thread
int times = 0;
@Override
public void run() //重写run方法,写上自己的逻辑代码
while (true)
//线程名Thread-0
System.out.println("喵喵,我是小猫咪" + (++times) + "线程名称:" + Thread.currentThread().getName());
try
//让该线程休眠1秒 ctrl+alt+t
Thread.sleep(1000);
catch (InterruptedException e)
e.printStackTrace();
if (times == 8)
break;
运行后的结果,可以看到主线程和子线程是交替执行的
二、实现Runnable接口,实现run方法
说明:java是单继承的,在某些情况下,一个类可能已经继承了一个父类,这时再用继承Thread类方法来创建线程显然是不可能了。
java设计者们提供了另外一个方法创建线程,就是通过实现Runnable接口来创建线程。
接下来编写一个程序来使用这个方法创建子线程,注释已经代码中给出
public class Thread2
public static void main(String[] args)
Dog dog = new Dog();
//创建了Thread对象,把dog对象(实现Runnable接口),放入Thread
Thread thread = new Thread(dog);
thread.start();
class Dog implements Runnable //通过实现Runnable接口,开发线程
int count = 0;
@Override
public void run()
while (true)
System.out.println("hi" + (++count) + "线程名:" + Thread.currentThread().getName());
try
//休眠1秒
Thread.sleep(1000);
catch (Exception e)
e.printStackTrace();
if (count == 10)
break;
运行结果:
以上就是创建线程的两种方法的基本详解,有不当之处,还望各位指正~
以上是关于java中创建线程的两种方式有啥区别的主要内容,如果未能解决你的问题,请参考以下文章