java中怎样创建线程_Java中如何创建线程

Java中如何创建线程

两种方式:1)继承Thread类;2)实现Runnable接口。

1.继承Thread类

继承Thread类,重写run方法,在run方法中定义需要执行的任务。

class MyThread extends Thread{

private static int num = 0;

public MyThread(){

num++;

}

@Override

public void run() {

System.out.println("主动创建的第"+num+"个线程");

}

}

//创建线程对象,start()方法启动线程。

public class Test {

public static void main(String[] args) {

MyThread thread = new MyThread();

thread.start();

}

}

在上面代码中,通过调用start()方法,就会创建一个新的线程了。为了分清start()方法调用和run()方法调用的区别,请看下面一个例子:

public class Test {

public static void main(String[] args) {

System.out.println("主线程ID:"+Thread.currentThread().getId());

MyThread thread1 = new MyThread("thread1");

thread1.start();

MyThread thread2 = new MyThread("thread2");

thread2.run();

}

}

class MyThread extends Thread{

private String name;

public MyThread(String name){

this.name = name;

}

@Override

public void run() {

System.out.println("name:"+name+" 子线程ID:"+Thread.currentThread().getId());

}

}

运行结果:

7064712.html

358b663391d2b895af7568ce290cdffe.png

结论:

1)thread1和thread2的线程ID不同,thread2和主线程ID相同,说明通过run方法调用并不会创建新的线程,而是在主线程中直接运行run方法,跟普通的方法调用没有任何区别;

2)虽然thread1的start方法调用在thread2的run方法前面调用,但是先输出的是thread2的run方法调用的相关信息,说明新线程创建的过程不会阻塞主线程的后续执行。

2.实现Runnable接口

实现Runnable接口必须重写其run方法。

下面是一个例子:

public class Test {

public static void main(String[] args) {

System.out.println("主线程ID:"+Thread.currentThread().getId());

MyRunnable runnable = new MyRunnable();

Thread thread = new Thread(runnable);

thread.start();

}

}

class MyRunnable implements Runnable{

public MyRunnable() {

}

@Override

public void run() {

System.out.println("子线程ID:"+Thread.currentThread().getId());

}

}

Runnable的中文意思是“任务”,顾名思义,通过实现Runnable接口,我们定义了一个子任务,然后将子任务交由Thread去执 行。注意,这种方式必须将Runnable作为Thread类的参数,然后通过Thread的start方法来创建一个新线程来执行该子任务。如果调用 Runnable的run方法的话,是不会创建新线程的,这根普通的方法调用没有任何区别。

事实上,查看Thread类的实现源代码会发现Thread类是实现了Runnable接口的。

直接继承Thread类的话,可能比实现 Runnable接口看起来更加简洁,但是由于Java只允许单继承,所以如果自定义类需要继承其他类,则只能选择实现Runnable接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值