提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
进程和线程的区别以及使用
一、进程和线程
进程:进程是系统分配资源的最小单位
线程:线程是系统调用的最小单位
两者区别:进程包含线程,每个进程至少有一个线程存在,即主线程。进程和线程之间不共享内存空间,同一个进程的线程之间共享同一个内存空间。一个进程挂了一般不会影响到其他进程,但是一个线程挂了,可能把同进程内的其他线程一起带走(整个进程崩溃)。
二、创建线程的方法
方法一:继承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表达式是一种简洁、灵活的编程工具,它允许程序员通过简洁的语法表达复杂的逻辑,同时提高了代码的可读性和可维护性。