每天晚上都会抽一点时间看面经,今天发现面经的线程和进程考的比较多而我还没有学,就学一下吧。慢慢更。
并发听起来复杂其实日常生活中都在用,比如说浏览器执行多个下载任务等。
多进程是操作系统为每个进程分配CPU时间片,给人并行处理的感觉。
多线程是在单个进程里给人同时处理多个任务的感觉。
本质区别:每个进程都拥有自己的一套变量,而线程共享数据。
Java中线程是一个类(Thread)。通过给Thread对象一个实现Runnable接口对象,这个对象重写了Run方法,Run方法里的内容就是线程执行的内容。调用Thread.Start()方法,JVM就会自动调用重写的run方法,运行这个线程。
1 //由于Runnable接口是一个函数是接口,所以可以用lambda表达式简化描写。 2 Runnable r = () -> { 3 void run() { 4 XXXXXXX; 5 } 6 } 7 8 new Thread(r).start();
新建:
用new新建一个线程,还没start时。
可运行:
调用start方法就处于可运行状态。可运行不一定就保持运行,操作系统根据优先级轮换线程的执行。
阻塞:
当一个线程试图获取一个内部对象锁(以后说),而该锁别其他线程占有,就处于阻塞状态。
等待:
当一个线程等待另一个线程的条件时,就会处于等待状态。
计时等待:
几个超时参数会让线程处于计时等待状态。
终止:
run方法自然退出或一个没有捕获的异常终止进程。
原文:https://www.cnblogs.com/hitsz-yc/p/14797461.html