08 启动线程;为什么说Java中只有Thread代表线程;静态代理 Thread类; 使用Lambda表达式更快捷编写线程

08 java多线程启动 静态代理Thread 使用功能lambda表达式快捷创建线程

启动线程

线程对象在初始化完成之后,调用start()方法就可以启动这个线程。

start()方法中调用一个本地方法start0();start0()该方法会开辟空间,分配内存,分配CPU等。

为什么说Java中只有Thread代表线程

  • 只有Thread代表线程,Runnable仅代表一个任务,可以被任何线程执行的任务。
  • Runnable不能有返回值,不能抛出checked exception。
  • Callable 可以有返回值,也能抛出异常。

Thread类的start0()方法,才会创建一个独立的方法栈。

Thread类的每一个实例代表一个JVM的线程;

public synchronized void start() {
        if (threadStatus != 0)
            throw new IllegalThreadStateException();

        group.add(this);

        boolean started = false;
        try {
            start0();
            started = true;
        } finally {
            try {
                if (!started) {
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
                /* do nothing. If start0 threw a Throwable then
                  it will be passed up the call stack */
            }
        }
    }

    private native void start0();

Runnable是一个函数式接口。

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

Callable也是一个函数式接口。

@FunctionalInterface
public interface Callable<V> {
    V call() throws Exception;
}

静态代理 Thread类

个人博客:静态代理模式 https://blog.csdn.net/lingyiwin/article/details/111999623

静态代理模式:

  • 代理对象和真实对象需要实现同一个接口
  • 代理对象中包含一个真实角色
new Thread(()->{
    System.out.println("真是对象");
}).start();

代理对象:new Thread() 实现了runnable接口

真是对象:()->{System.out.println(“真是对象”);} lambda表达式。相当于实现了runnable接口的类,run方法为方法体为System.out.println(“真是对象”);

Lambda表达式

个人博客:Lambda expression https://blog.csdn.net/lingyiwin/category_10498912.html?spm=1001.2014.3001.5482

为什么要使用lambda表达式

  • 避免匿名内部类定义过多
  • 可以让代码看起来更简洁
  • 去掉一堆没有意义的代码,只留下核心的逻辑。

函数式接口的定义:

  • 接口内部只有一个方法,成为函数式接口
  • 函数式接口,可以通过lambda表达式来创建。

lambda和java内部类的区别:详细可以参考一下lambda表达式的博客

  • new LambdaInterface01() 直接简化为()
  • 方法名public void fun() 简化为 ->
/**
 * lambda简化过程
 * 倘若要调用LambdaInterface接口的fun方法
 * 有如下几种方法
 *  1:实现类
 *  2:静态内部类
 *  3:局部内部类
 *  4:匿名内部实现类
 *  5:lambda表达式简化
 * lambda表达式是最简单的方法
 */
public class LambdaProcess {

    public static void main(String[] args) {
        new LambdaClass().fun();
        new LambdaStaticInnerClass().fun();

        /**
         * 3:局部内部类
         **/
        class LambdaPartInnerClass implements LambdaInterface{
            @Override
            public void fun() {
                System.out.println("3: LambdaInterface 局部内部实现类");
            }
        }
        new LambdaPartInnerClass().fun();

        /**
         * 4:匿名内部实现类
         **/
        new LambdaInterface(){
            @Override
            public void fun() {
                System.out.println("4: LambdaInterface 匿名内部实现类");
            }
        }.fun();

        /**
         * 5:lambda表达式简化
         **/
        LambdaInterface lab = () -> {
            System.out.println("5: LambdaInterface 静态内部实现类");
        };
        lab.fun();


    }

    /**
     * 2:静态内部类
     **/
    static class LambdaStaticInnerClass implements LambdaInterface{
        @Override
        public void fun() {
            System.out.println("2: LambdaInterface 静态内部实现类");
        }
    }
}


/**
 * 内部接口
 * 接口内部只有一个方法,称为函数式接口
 */
interface LambdaInterface{
    public void fun();
}

/**
 * 1:实现类
 **/
class LambdaClass implements  LambdaInterface{

    @Override
    public void fun() {
        System.out.println("1: LambdaInterface 实现类");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EngineerForSoul

你的鼓励是我孜孜不倦的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值