创建线程的方式

一。继承Thread类创建子类

步骤:

1.定义Thread的子类,重写该类的run方法,run方法称为是执行体

2.创建Thread子类的实例,创建线程对象

3.调用线程对象的start()方法启动该线程


代码实现:

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

public class A {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new MyThread().start();

	}

}

也可以:

public class A {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		new Thread(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				System.out.println("线程开启");
			}
		}).start();

	}

}

二。实现Runnable接口创建线程

1.定义Runnable接口的实现类,重写run方法,是线程的执行体
2.创建Runnable实现类的实例,用这个实例作为Thread的target来创建Thread对象,这个Thread对象是真正的线程对象
3.调用线程对象的start()方法启动线程
class MyThread implements Runnable{
	@Override
	public void run(){
		System.out.println("线程执行");
	}
}


public class A {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
      MyThread myThread =new MyThread();
	  Thread thread = new Thread(myThread);
	  thread.start();
	  //或者
	//  new Thread(new MyThread()).start();

	}

}

三。使用Callable和Future创建线程

Callable接口提供一个call()方法作为线程执行体,call()方法比run()方法功能要强大,call()方法可以有返回值,call()方法可以声明抛出异常。
步骤:
1.创建Callable接口的实现类,实现call()方法,然后创建该实现类的实例
2.使用FutureTask类来包装Callable对象,该FutureTask对象封装Callable对象的call()方法的返回值
3.使用FutureTask对象作为Thread对象创建并启动线程
4.调用FutureTask对象的get()方法来获得子线程执行结束后的返回值


class MyThread implements Callable<String> {

	@Override
	public String call() throws Exception {
		// TODO Auto-generated method stub
		int i = 0;
		String reString = "";
		for (; i < 10; i++) {
			reString = Thread.currentThread().getName() + " " + i;
			System.out.println(reString);
		}
		return reString;
	}

}

public class A {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		MyThread myThread = new MyThread();
		FutureTask<String> ft = new FutureTask<>(myThread);
		new Thread(ft, "子线程").start();

	}

}

1、接口实现更灵活,还可以继承其他类,java不支持多继承。在这方面,Runnable和Callable更有优势。
2、返回值问题。Runnable和Thread都不能有返回值,但Callable可以,而且支持多种类型的数据。
3、继承Thread类的线程类不能再继承其他父类(Java单继承决定)。
4、使用callable和Future 和实现Runnable方式下,多个线程可以共享一个target对象,非常适合多线程处理同一份资源的情形。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值