Java 实现多线程的三种方式

企鹅博客 2019年7月14日23:26:23 发表评论 124 views

Java 实现多线程的三种方式

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

public class Main {

    public static void main(String[] args) {
        //方法一:继承Thread
        int i = 0;
//        for(; i < 100; i++){
//            System.out.println(Thread.currentThread().getName() + " " + i);
//            if (i == 5) {
//                ThreadExtendsThread threadExtendsThread = new ThreadExtendsThread();
//                threadExtendsThread.start();
//            }
//        }
       
        //方法二:实现Runnable
//        for(i = 0; i < 100; i++){
//            System.out.println(Thread.currentThread().getName() + " " + i);
//            if (i == 5) {
//                Runnable runnable = new ThreadImplementsRunnable();
//                new Thread(runnable).start();
//                new Thread(runnable).start();
//            }
//        }

        //方法三:实现Callable接口
        Callable<Integer> callable = new ThreadImplementsCallable();
        FutureTask<Integer> futureTask = new FutureTask<>(callable);
        for(i = 0; i < 100; i++){
            System.out.println(Thread.currentThread().getName() + " " + i);
            if (i == 5) {
                new Thread(futureTask).start();
                new Thread(futureTask).start();
            }
        }
        try {
            System.out.println("futureTask ruturn: " + futureTask.get());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

方法一,继承自Thread

public class ThreadExtendsThread extends Thread {
    private int i;
    @Override
    public void run() {
        for(; i < 100; i++) {
            System.out.println(getName() + " " + i);
        }
    }
}

run方法为线程执行体,ThreadExtendsThread对象即为线程对象。

方法二,实现Runnable接口

public class ThreadImplementsRunnable implements Runnable {
    private int i;
    @Override
    public void run() {
        for(; i < 100; i++){
            System.out.println(Thread.currentThread().getName() + " " + i);
        }
    }
}

run方法为线程执行体,使用时New一个Thread对象,Runnable对象作为target传递给Thread对象。且同一个Runnable对象可作为多个Thread的target,这些线程均共享Runnable对象的实例变量。

方法三,实现Callable接口

import java.util.concurrent.Callable;

public class ThreadImplementsCallable implements Callable<Integer> {
    private int i;
   
    @Override
    public Integer call() throws Exception {
        for(; i < 100; i++){
            System.out.println(Thread.currentThread().getName() + " " + i);
        }
        return i;
    }
}

除非注明,否则均为@企鹅博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.qieseo.com/133367.html

weinxin
欢迎加入中国SEO站长博客之家
本站的所有资源都会上传分享到博客之家,希望大家互相学习交流进步。
企鹅博客

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: