多线程的概念与创建

本文详细介绍了进程和线程的概念,强调了它们的区别,并提供了四种创建线程的方法:继承Thread类、实现Runnable接口、匿名内部类和lambda表达式。重点讲解了Lambda表达式在简化代码和提高效率方面的优势。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

进程和线程的区别以及使用

一、进程和线程

进程:进程是系统分配资源的最小单位

线程:线程是系统调用的最小单位

两者区别:进程包含线程,每个进程至少有一个线程存在,即主线程。进程和线程之间不共享内存空间,同一个进程的线程之间共享同一个内存空间。一个进程挂了一般不会影响到其他进程,但是一个线程挂了,可能把同进程内的其他线程一起带走(整个进程崩溃)。

二、创建线程的方法

方法一:继承Thread类来创建线程

class Demo1 extends Thread{
    @Override
    public void run() {//线程的入口方法
        while (true){
            System.out.println("hello thread");
        }
    }
}
public class test1{
    public static void main(String[] args) throws InterruptedException {
        Thread thread=new Demo1();
        thread.start();//真正调用

方法二:实现Runnable接口

class Demo2 implements Runnable {
    @Override
    public void run() {
        while (true) {
            System.out.println("hello thread");
            try {
                sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
}
public class test1{
    public static void main(String[] args) throws InterruptedException {
             Runnable runnable=new Demo2();
             Thread thread1=new Thread(runnable);
             thread1.start();

方法三:匿名内部类创建Thread子类对象

public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread() {//匿名内部类

            @Override
            public void run() {
                while (true) {
                    System.out.println("xxxxxxx");
                    try {
                        sleep(1000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
                }
            };
            thread.start();
            while (true){
                System.out.println("hello main");
                Thread.sleep(1000);
            }

        }

方法四:lambda表达式创建Runnable子类对象

public static void main(String[] args) {
        Thread thread=new Thread(()->{//lambda表达式
            while (true){
                System.out.println("xxxxxx");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        },"这是新线程");//给线程取名字
        thread.start();
        while (true){
            System.out.println("sssssss");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }

Lambda是一种基于数学中的λ演算的匿名函数,它允许程序员通过表达式来代替函数式接口中的方法实现。Lambda 表达式在Java SE 8和C#等编程语言中都有应用,它们提供了参数列表和代码主体,用于实现特定的功能。

在Java中,Lambda表达式的语法可以表示为:

  • (parameters) -> expression
  • (parameters) -> { statements; }

其中,parameters代表参数列表,可以是具体的类型或者由JVM隐含推断的类型。当只有一个参数时,可以省略圆括号。->符号表示“被用于”,而后面的expression或代码块则是方法体,它可以是表达式或者代码块,用于实现接口中的抽象方法。

Lambda表达式在函数式接口中使用,函数式接口是指只包含一个抽象方法的接口。使用Lambda表达式可以简化代码,提高编程效率。例如,在Java中,可以通过Lambda表达式来实现Runnable接口,从而创建一个可以执行的匿名线程。

此外,Lambda表达式还可以作为参数传递给其他函数或方法,例如在Stream API中使用Lambda表达式来操作集合,或者作为构造器参数等。

需要注意的是,如果一个接口中声明了@FunctionalInterface注解,那么它必须是一个函数式接口,且只能包含一个抽象方法。如果违反这一规则,编译器会报错。

综上所述,Lambda表达式是一种简洁、灵活的编程工具,它允许程序员通过简洁的语法表达复杂的逻辑,同时提高了代码的可读性和可维护性。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值