首页 > 编程语言 >Java——多线程:Lamda表达式

Java——多线程:Lamda表达式

时间:2022-11-24 19:35:39浏览次数:44  
标签:lamda Java like 对象 void Lamda 接口 多线程 public

多线程理解

继承Thread类

  • 子类继承Thread类具备多线程能力

  • 启动线程:子类对象.start()

  • 不建议使用:避免oop单继承局限性

实现Runnable接口

  • 实现接口Runnable具有多线程能力

  • 启动线程:传入目标对象+Thread对象.start()

  • 推荐使用:避免单继承局限性,可能一个对象被多个线程使用

多个线程同时操作同一个对象

问题:多个线程操作同一个资源,可能会出现资源冲突问题

实现Callable接口

  • 实现Callable接口,需要返回值类型

  • 重写call方法,需要抛出异常

  • 创建目标对象

  • 创建执行服务

  • 提交执行

  • 获取结果

  • 关闭服务

静态代理

  抽象角色:声明真实对象和代理对象的共同接口。

  代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能够代替真实对象。

  同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

  真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。

Lamda表达式

学习前提:

为什么使用

  • 避免匿名内部类定义过多

  • 可以使代码更简洁

  • 去掉无意义代码,留下核心逻辑

理解函数式接口

定义:只包含唯一一个抽象方法的接口,如:

public interface Runnable{
    public abstract void run();
}

对于函数式接口,我们可以通过lamda表达式来创建该接口的对象。

推导逻辑:

package JavaText.Text;
​
public class LamdaTest {
    //3.静态内部类
    static class like2 implements ILike{
        public void lamda(){
            System.out.println("I like lamda2");
        }
    }
​
​
    public static void main(String[] args) {
        ILike like = new like();
        like.lamda();
​
        like2 like2=new like2();
        like2.lamda();
​
        //4.局部内部类
        class like3 implements ILike{
            public void lamda(){
                System.out.println("I like lamda3");
            }
        }
        like = new like3();
        like.lamda();
​
        //5.匿名内部类,没有类的名称,必须借助接口或父类
        like =new ILike(){
            @Override
            public void lamda(){
                System.out.println("I like lamda4");
            }
        };
        like.lamda();
​
        //6.lamda表达式
        like=()->{
            System.out.println("I like lamda5");
        };
        like.lamda();
​
​
​
    }
}
//1.定义一个函数式接口
interface ILike{
    void lamda();
}
​
//2.常用类
class like implements ILike{
    public void lamda(){
        System.out.println("I like lamda1");
    }
}
Lamda表达式其实就是省略掉那些唯一不可变的东西,如在这一段代码当中:
//5.匿名内部类,没有类的名称,必须借助接口或父类
        like =new ILike(){
            @Override
            public void lamda(){
                System.out.println("I like lamda4");
            }
        };
        like.lamda();
​
        //6.lamda表达式
        like=()->{
            System.out.println("I like lamda5");
        };
        like.lamda();
----
    new ILike(){
            @Override
            public void lamda(),括号之前的代码都是唯一不可变的,因此可以省略,而括号之后的代码是自己定义的因此保留括号以后的代码在加上->即可。
​

 

 

 

标签:lamda,Java,like,对象,void,Lamda,接口,多线程,public
From: https://www.cnblogs.com/xiaowangaixuexi/p/16922975.html

相关文章

  • Java使用Redis
    1.下载jedis.jar2.四个数据类型以及键操作publicclassRedisTest{publicstaticvoidmain(String[]args)throwsInterruptedException{RedisTes......
  • java后端构造树结构列表的方法,前端一次请求,后端全部返回;
    目的:构造部门上下级部门树列表,在业务层构建树结构,返回给前端,减少前端工作量。方式DeptVo.javapackagecom.pshdhx.treebuild;importjava.util.ArrayList;importjava.util.......
  • 【Java】将枚举类转换为Redis字典缓存
     字典翻译框架实现看这篇:https://www.cnblogs.com/mindzone/p/16890632.html枚举的特性首先是枚举的一些特性:1、枚举实例直接在枚举类中声明2、重载构造器,......
  • Java 集合 - 总结
    介绍Java集合类是数据结构的实现,这些类用来存储和操作对象。常见接口1、Collection:最基本的集合接口,存储一组不唯一,无序的对象。2、List:继承Collection接口,存储一组......
  • Java9集合类中重载多个of方法原因
    在java9api的集合类中,有很多看似一样的重载of方法:那这里有个问题是为什么有了VarArgs(可变长参数)方法,还需要定义那么多重载的方法呢?查看官方的更新日志中可以发现有如下描......
  • java基础笔记
    一、泛型受限1、类型通配符上限:类/接口<?extends实参类型>要求该泛型的类型只能是实参类型,或者实参类型的子类类型 2、类型通配符下限:类/接口<?extends实参类型>要......
  • Java LocalDateTime类相关方法
    1.加减方法//localdatetime类型时间增加减少LocalDateTimelocalDateTime=LocalDateTime.now().plusSeconds(20);//当前时间加20秒Loca......
  • 资深java面试题及答案整理(三)
    资深java面试题及答案整理(三)如何使用双重检查锁定在Java中创建线程安全的单例?艰难的核心Java面试问题.这个Java问题也常被问:什么是线程安全的单例,你怎么创建它......
  • java基础——二维数组基本概念
    之前我们已经知道什么是数组(一维数组)java基础——数组,数组的存取 这里补充一点: 数组本身是引用数据类型,数组的元素 可以是  基本数据类型 跟 引用数据类型 ......
  • Java实现环形队列
    这里我定义的环形队列为:列表中最后一个元素是指向列表中的第一个元素,而且里面提供一个next方法,可以不断获取下一个元素,在环形队列中也就是不断的转圈,实现方式如下:队列中提供......