java中创建线程的两种方法及比较

235 阅读1分钟

1.继承Thread类,重写run()方法

(1)继承Thread类,重写run()方法 (2)创建子类对象 (3)调用线程对象的start()方法,启动线程

public class Demo extends Thread {

	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(getName() + ":" + "i=" + i);
		}
	}

	public static void main(String[] args) {
		Demo d = new Demo();
		d.setName("线程1");
		d.start();
	}
}

getName():可以获得当前线程的名称。 setName():设置线程名。

2.实现Runable接口

(1)实现接口中的run()方法,将线程的任务代码封装到run方法中; (2)通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造方法的参数进行传递; (3)调用线程对象的start()方法开启线程

public class Demo implements Runnable {

	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println("i=" + i);
		}
	}

	public static void main(String[] args) {
		Demo d = new Demo();
		Thread tr = new Thread(d);//将Runnable接口的子类对象作为Thread类的构造方法的参数进行传递
		tr.start();
	}
}

3.实现Runnable接口创建线程的好处

  1. 将线程的任务从线程的子类中分离出来,进行了单独的封装。按照面向对象的思想将任务封装成对象;
  2. 避免了java单继承的局限性;

所以这种方式比较常用