Java多线程之一

 在 Java程序中,有三种种方法创建线程:

(1)继承Thread类,重写Thread类中的run()方法,直接创建线程;

(2)实现Runnable接口,在通过Thread类和Runnable的实现类间接创建一个线程;

(3)使用Callable和Future接口间接创建线程。

线面分别用着三种方法创建线程:

1.继承Thread类

package cn.mesie.thread;

public class MyThread extends Thread {

    // 重写run方法
    @Override
    public void run() {
        for(int i = 0;i < 100;i++){
            System.out.println(this.getName() + ":" + i);
        }
    }

    public static void main(String[] args) {
        //创建线程
        MyThread mt = new MyThread();
        //启动线程
        mt.start();
        //住线程任务
        for (int i = 1000;i < 1010;i++){
            System.out.println(Thread.currentThread().getName() + ":" + i);
        }
    }
}

2.实现Runnable接口:

package cn.mesie.thread;

public class MyThread01 implements Runnable {

    //重写run方法
    @Override
    public void run() {
        for(int i = 0;i < 100;i++){
            System.out.println(Thread.currentThread().getName() + ":" + i);
        }
    }

    public static void main(String[] args) {
        //创建线程
        Thread mt = new Thread(new MyThread01());
        //启动线程
        mt.start();
        //住线程任务
        for (int i = 1000;i < 1010;i++){
            System.out.println(Thread.currentThread().getName() + ":" + i);
        }
    }
}

3.使用Callable和Future接口:

package cn.mesie.thread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class MyThread02 implements Callable<Integer> {

    //实现call方法
    @Override
    public Integer call() throws Exception {
        int i = 0;
        for(;i < 100;i++){
            System.out.println(Thread.currentThread().getName() + ":" + i);
        }
        return i;
    }

    public static void main(String[] args) {

        //调用FutureTask类包装的Callable实现类的实例
        FutureTask<Integer> task = new FutureTask<Integer>(new MyThread02());
        new Thread(task,"子线程").start();
        try {
            System.out.println("子线程返回值:" + task.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        //住线程任务
        for (int i = 1000;i < 1010;i++){
            System.out.println(Thread.currentThread().getName() + ":" + i);
        }

    }
}

猜你喜欢

转载自blog.csdn.net/baidu_28610773/article/details/82938299