创建线程的方式

来源:互联网 发布:mac 下 看 运行程序 编辑:程序博客网 时间:2024/06/01 09:52

一。继承Thread类创建子类

步骤:

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

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

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


代码实现:

class MyThread extends Thread {@Overridepublic void run() {System.out.println("线程执行");}}public class A {public static void main(String[] args) {// TODO Auto-generated method stubnew MyThread().start();}}

也可以:

public class A {public static void main(String[] args) {// TODO Auto-generated method stubnew Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("线程开启");}}).start();}}

二。实现Runnable接口创建线程

1.定义Runnable接口的实现类,重写run方法,是线程的执行体
2.创建Runnable实现类的实例,用这个实例作为Thread的target来创建Thread对象,这个Thread对象是真正的线程对象
3.调用线程对象的start()方法启动线程
class MyThread implements Runnable{@Overridepublic 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> {@Overridepublic String call() throws Exception {// TODO Auto-generated method stubint 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 stubMyThread 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对象,非常适合多线程处理同一份资源的情形。


原创粉丝点击