zoukankan      html  css  js  c++  java
  • 01.线程的三种创建方式与运行

    Java 中有三种线程创建方式,分别为实现 Runnable 接口的 run 方法,继承 Thread 类 并重写 run 的方法,使用 FutureTask 方式

    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.FutureTask;
    
    /**
     * 线程创建与运行
     */
    public class Main {
    
        public static void main(String[] args) throws InterruptedException{
            //外任务与代码没有分离, 当多个线程执行一样的任务时需要 多份任务代码
            MyTread tread = new MyTread(12);
            tread.start();
            System.out.println(Thread.currentThread().getName());//main
            RunableTask runableTask = new RunableTask("21");
            //两个线程共用一个 task 代码逻辑
            new Thread(runableTask).start();
            new Thread(runableTask).start();
            //main
            //I'm a threadThread-0 12
            //I'm a threadThread-1 21
            //I'm a threadThread-2 21
    
            //创建异步任务
            FutureTask<String> futureTask = new FutureTask<>(new CallerTask());
            //启动线程
            new Thread(futureTask).start();
            try {
                //等待任务执行完,返回结果
                String s = futureTask.get();
                System.out.println(s);//hello
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
        }
        public static class MyTread extends Thread{
            private int age;
    
            public MyTread(int age) {
                this.age = age;
            }
    
            @Override
            public void run() {
                //获取当前线程直接使用 this 就可以了
                System.out.println("I'm a thread"+this.getName()+" "+age);//I'm a threadThread-0
            }
        }
        public static class RunableTask implements Runnable{
            private String age;
    
            public RunableTask(String age) {
                this.age = age;
            }
    
            @Override
            public void run() {
                System.out.println("I'm a thread"+Thread.currentThread().getName()+" "+age);
            }
        }
        //创建任务类
        public static class CallerTask implements Callable<String>{
            @Override
            public String call() throws Exception {
                return "hello";
            }
        }
    }
    
  • 相关阅读:
    二叉索引树
    将rst转换为markdown格式
    LeetCode电话号码的字母组合题
    根据文件名列表批量复制文件
    VMware+Alpine代替Docker部署Gogs服务
    wsl安装Ubuntu16.04无法ssh提示Permission denied (publickey)
    json二位数组根据指定键名去重
    thinkphp6 关联模型如何查询已经软删除的数据
    DB2数据库配置步骤(图解)
    基于SpringBoot2.3.1进行AOP原理源码阅读
  • 原文地址:https://www.cnblogs.com/fly-book/p/11357682.html
Copyright © 2011-2022 走看看