Java创建线程执行任务的方法(一)

目录

1.继承Thread类

2.实现Runnab类

2.1实现Runnable类

2.2使用Lambda表达式

3.实现Callable类

3.1返回Integer类型数据

3.2返回String类型数据

3.3返回Object类型数据

4.匿名内部类


创建线程的方法:继承Thread类;实现Runnab类;匿名内部类;实现Callable类

1.继承Thread类

java 复制代码
/**继承Thread类*/
public class ThreadDemo extends Thread{
    public static void main(String[] args) {
        ThreadDemo threadDemo = new ThreadDemo();
        /**start() 启动当前线程;调用当前线程run()方法*/
        threadDemo.start();
    }

    /**重写run()*/
    @Override
    public void run() {
        /**执行run()中间的任务*/
        int num =100;
        for (int i=1;i<=num;i++){
            if (i%2 ==0){
                System.out.println("1-100的偶数为:" + i);
            }
        }
    }
}

2.实现Runnab类

2.1实现Runnable类

java 复制代码
/**实现Runnable类*/
public class ThreadDemo implements Runnable {
    public static void main(String[] args) {
        ThreadDemo threadDemo = new ThreadDemo();
        /**获取Thread对象,将自定义的ThreadDemo对象存进去*/
        Thread thread = new Thread(threadDemo);
        /**start() 启动当前线程;调用当前线程run()方法*/
        thread.start();
    }

    /**重写run()*/
    @Override
    public void run() {
        /**执行run()中间的任务*/
        int num =100;
        for (int i=1;i<=num;i++){
            if (i%2 ==0){
                System.out.println("1-100的偶数为:" + i);
            }
        }
    }
}

2.2使用Lambda表达式

java 复制代码
/**Lambda表达式*/
public class ThreadDemo {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            int num = 20;
            for (int i = 1; i <= num; i++) {
                if (i % 2 != 0) {
                    System.out.println("1-20的奇数为:" + i);
                }
            }
        });
        /**start() 启动当前线程;调用当前线程run()方法*/
        thread.start();
    }
}
java 复制代码
/**Lambda表达式*/
public class ThreadDemo {
    public static void main(String[] args) {
        new Thread(() -> {
            /**执行->箭头后面的任务*/
            System.out.println("线程");
        }).start();
    }
}

3.实现Callable类

当 FutureTask 处于未启动或已启动状态时,执行 FutureTask**.** get()方法将导致调用线程阻塞。如果 FutureTask 处于已完成状态,调用FutureTask**.** get()方法将导致调用线程立即返回结果或者抛出异常。

3.1返回Integer类型数据

java 复制代码
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**Callable方法*/
public class ThreadDemo implements Callable<Integer> {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<Integer> integerFutureTask = new FutureTask<>(new ThreadDemo());
        Thread thread = new Thread(integerFutureTask);
        thread.start();
        Integer result = integerFutureTask.get();
        System.out.println(result);
    }

    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 1; i <= 10; i++){
            sum += i;
        }
        return sum;
    }
}

3.2返回String类型数据

java 复制代码
/**Callable方法*/
public class ThreadDemo implements Callable<String> {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<String> stringFutureTask = new FutureTask<>(new ThreadDemo());
        Thread thread = new Thread(stringFutureTask);
        thread.start();
        /**输出 线程进行中 */
        String result = stringFutureTask.get();
        System.out.println(result);
        /**输出 Thread-0 */
        /*String name = thread.getName();*/
        /*System.out.println(name);*/
    }

    @Override
    public String call() throws Exception {
        return "线程进行中";
    }
}

3.3返回Object类型数据

java 复制代码
public class User {
    private String name = "张三";
    private int age = 18;
    private String gender ="男";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public User(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public User() {
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}
java 复制代码
/**Callable方法*/
public class ThreadDemo implements Callable<Object> {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<Object> stringFutureTask = new FutureTask<>(new ThreadDemo());
        Thread thread = new Thread(stringFutureTask);
        thread.start();
        Object result = stringFutureTask.get();
        /**输出 User{name='张三', age=18, gender='男'}*/
        System.out.println(result);
    }

    @Override
    public Object call() throws Exception {
        User user = new User();
        /** 返回 包名.类名@哈希码值(demo.User@135fbaa4)*/
        /*return user;*/
        /**返回 User{name='张三', age=18, gender='男'}*/
        return user.toString();
    }
}

4.匿名内部类

java 复制代码
/**匿名内部类*/
public class ThreadDemo {
    public static void main(String[] args) {
        /**获取Thread对象,使用匿名内部类方式获取Runnable对象*/
        Thread thread = new Thread(new Runnable() {
            /**重写run()*/
            @Override
            public void run() {
                /**执行run()中间的任务*/
                int num = 100;
                for (int i = 1; i <= num; i++) {
                    if (i % 2 != 0) {
                        System.out.println("1-100的奇数为:" + i);
                    }
                }
            }
        });
        /**start() 启动当前线程;调用当前线程run()方法*/
        thread.start();
    }
}
相关推荐
txinyu的博客几秒前
结合游戏场景解析UDP可靠性问题
java·开发语言·c++·网络协议·游戏·udp
一路向北North2 分钟前
springboot基础(85): validator验证器
java·spring boot·后端
1.14(java)12 分钟前
掌握数据库约束:确保数据精准可靠
java·数据库·mysql·数据库约束
Codeking__16 分钟前
Redis——value的数据类型与单线程工作模型
java·数据库·redis
人道领域18 分钟前
【零基础学java】(等待唤醒机制,线程池补充)
java·开发语言·jvm
名字不好奇21 分钟前
在C++中 如何实现java中的Stream
java·c++
alonewolf_9922 分钟前
Tomcat整体架构深度解析:从设计精髓到实战应用
java·架构·tomcat
摩西蒙24 分钟前
阿里云 MaxCompute(原 ODPS)定时任务查询库存快照场景
java·大数据·sql·database
黎雁·泠崖26 分钟前
Java入门之吃透基础语法:注释+关键字+字面量+变量全解析
java·开发语言·intellij-idea·intellij idea
短剑重铸之日26 分钟前
《7天学会Redis》Day 1 - Redis核心架构与线程模型
java·redis·后端·架构·i/o多路复用·7天学会redis