Java 实现多线程的三种方式

企鹅博客
19276
文章
0
评论
2019年7月14日23:26:23 评论 882 views 1960字阅读6分32秒

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;
    }
}

继续阅读
  • 版权声明: 发表于 2019年7月14日23:26:23
  • 转载注明:https://www.qieseo.com/133367.html
在UNIX系统中实现堆栈跟踪 Linux编程

在UNIX系统中实现堆栈跟踪

在程序运行的过程中,如果出现异常,通常会发出一个信号进入信号处理函数中处理。有些故障过于严重到无法实现程序的自恢复。这个时候,程序只能无奈的输出一些错误信息。当然这些错误信息对程序的调试也是非常有帮助...
Linux下C语言url请求 Linux编程

Linux下C语言url请求

任何代码只有你写过,才能深刻理解,有的时候看文档看的很茫然的时候,尽量找点别人的源码,在别人源码上更改,在调试,可能会达到事半功倍的效果。 近来项目需要Linux中访问一个url接口传参数及...
匿名

发表评论

匿名网友 填写信息

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