认识线程
1.进程与线程概念
一个进程可以有多个线程
一个进程挂了,不会影响到其他进程
一个线程挂了,同一个进程的线程可能都会出现问题
同一个进程的线程之间,共用了同一份资源
2.创建线程
继承Thread,重写run
2.1并发执行
重写了run方法
一路向下走hello main的主线程,一路走hello thread的线程
2.2把start改成run
运行结果也只有一个死循环了
一个java进程中,至少会有一个main线程
3.sleep
while(true)运行太快了,可以用sleep减速
sleep里的单位是毫秒,1000等于1秒
此处可能会抛出一个受查异常,必须要显式处理
解决方法:
ALT+回车
这个代码是重写父类的run,父类的run没有throws,子类方法也就不能有throws
4.创建线程其他的写法
4.1.实现Runnable,重写run
这里的内容和作用和之前是一样的
4.2继承Thread,重写run,但是使用匿名内部类
4.3基于lambda表达式
public class Demo5 {public static void main(String[] args) {Thread t = new Thread(() -> {while (true){System.out.println("hello thread");try {Thread.sleep(1000);}catch (InterruptedException e){e.printStackTrace();}}});t.start();while (true){System.out.println("hello main");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}
lambda表达式为什么不用重写run方法?
lambda自己就是run方法(run方法是线程的入口,告诉线程你要干嘛,而lambda就是用来表示逻辑的,使用lambda就能描述出当前的线程要干嘛