创建多线程之Lambda表达式

Lambda表达式的标准格式

1.一些参数
2.一个箭头
3.方法体

标准格式为:(参数类型  参数名称)->{线程要实现的具体的任务 }

格式说明:

  • 小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
  • -> 是新引入的语法格式,代表指向动作
  • 大括号内的语法与传统方法体要求基本一致。

练习一:使用Lambda标准格式(无参无返回)
给定一个厨子 Cook 接口,内含唯一的抽象方法 makeFood ,且无参数、无返回值。如下:

//Cook接口
public interface Cook {
    abstract void makeFood();
}

/**
 * 给定一个厨子 Cook 接口,内含唯一的抽象方法 makeFood ,且无参数、无返回值。xxxxxxxxxxxxxx
 */
public class Test {
    public static void main(String[] args) {
        //匿名内部类:调用invokeFood方法,传递接口Cook的匿名内部类对象
        invokeFood(new Cook() {
            @Override
            public void makeFood() {
                System.out.println("吃饭了");
            }
        });
        invokeFood(()->{
            System.out.println("吃饭了");
        });
    }
    //定义一个方法invokeFood,参数传递Cook接口,方法内部调用makeFood方法
    private static void invokeFood(Cook cook){
        cook.makeFood();
    }
}

练习二:使用Lambda标准格式(有参有返回)

Person类

public class Person {
    private String name;
    private int age;

    public Person() {
    }

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

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Person{name = " + name + ", age = " + age + "}";
    }
}

测试类

/**
 * 需求:使用数组创建多个对象,对多个对象的年龄使用Arrays的sort()进行升序排序。
 */
public class Lamb {
    public static void main(String[] args) {
        Person[] arry = {
                new Person("张三",19),
                new Person("李四",30),
                new Person("王五",58),
        };
       /* //使用匿名内部类的方式
        Arrays.sort(arry, new Comparator<Person>() {
            //升序前面一个减去后面一个
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge()- o2.getAge();
            }
        });*/
        //使用lamb表达式的方式
        Arrays.sort(arry,(Person o1, Person o2)->{
            return o1.getAge()- o2.getAge();
        });
        for (Person person : arry) {
            System.out.println(person);
        }
    }
}

练习三:使用Lambda标准格式(有参有返回)

Caculator接口

/**
 需求:给定一个计算器Caculator接口,内含抽象方法cal()计算两个int类型的整数的和,使用lambda表达式的调用invokeCalc方法计算两个整数的和
*/
public interface Caculator {
  public abstract int cal(int a,int b);
}

测试类

public class Test {
    public static void main(String[] args) {
        //匿名内部类的方式
        invokeCalc(10, 20, new Caculator() {
            @Override
            public int cal(int a, int b) {
                return a+b;
            }
        });
        //使用lambda表达式(参数类型)->{ 方法体 }
        invokeCalc(120,130,( int a, int b)->{
            return a+b;
        });
    }
    public static void invokeCalc(int a,int b,Caculator c){
        int sum = c.cal(a,b);
        System.out.println(sum);
    }
}

注意:
lambda表达式的使用前提:
1.使用lambda表达式必须有接口,接口中有且仅有一个抽象方法。
2.使用lambda表达式必须有上下文的推断。

备注:有且仅有以一个抽象方法的接口称为函数式接口。
使用lambda表达式创建多线程的步骤如下: 1. 首先,需要有一个接口,该接口中只有一个抽象方法,这样的接口称为函数式接口。 2. 在lambda表达式中,使用箭头符号(->)将参数和方法体分隔开。 3. 在方法体中编写线程的具体逻辑。 4. 调用start()方法启动线程。 下面是一个示例代码: ```java public class Lambda { public static void main(String\[\] args) { // 使用Lambda表达式创建多线程 new Thread(() -> { System.out.println(Thread.currentThread().getName() + "创建线程"); }).start(); } } ``` 在上述代码中,我们使用lambda表达式创建了一个新的线程,并在其中打印了线程的名称。通过调用start()方法,线程会被启动并执行其中的逻辑。 #### 引用[.reference_title] - *1* [线程同步,线程状态,线程通信,线程池](https://blog.csdn.net/zza791043251/article/details/111054407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Lambda方式创建多线程](https://blog.csdn.net/weixin_55782195/article/details/117225697)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [创建多线程Lambda表达式](https://blog.csdn.net/weixin_44765236/article/details/109616570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值