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类

/**继承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类

/**实现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表达式

/**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();
    }
}
/**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类型数据

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类型数据

/**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类型数据

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 + '\'' +
                '}';
    }
}
/**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.匿名内部类

/**匿名内部类*/
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();
    }
}

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用多种方式来创建线程并异步执行任务。以下是一种常见的实现方式: 1. 使用Thread类:可以通过继承Thread类并重写run()方法创建线程。在run()方法中定义需要异步执行任务。然后,创建Thread对象并调用start()方法启动线程。 示例代码如下: ```java class MyThread extends Thread { @Override public void run() { // 异步执行任务 System.out.println("异步任务开始执行"); // 执行其他操作... System.out.println("异步任务执行完毕"); } } public class Main { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); // 执行其他操作... } } ``` 2. 使用Runnable接口:可以通过实现Runnable接口来创建线程。在实现的run()方法中定义需要异步执行任务。然后,创建Thread对象并将实现了Runnable接口的对象作为参数传递给Thread的构造函数。 示例代码如下: ```java class MyRunnable implements Runnable { @Override public void run() { // 异步执行任务 System.out.println("异步任务开始执行"); // 执行其他操作... System.out.println("异步任务执行完毕"); } } public class Main { public static void main(String[] args) { MyRunnable runnable = new MyRunnable(); Thread thread = new Thread(runnable); thread.start(); // 执行其他操作... } } ``` 以上是两种常见的创建线程并异步执行任务的方式。在实际应用中,还可以使用线程池、Callable接口等方式来实现异步任务执行

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值