并发与并行
并发:指两个或多个事件在同一时段内发生
交替执行
并行:指两个或多个事件在同一时刻发生(同时发生)
同时执行
进程与线程
进程:进入内存的程序加进程
所有的应用程序都需要进入到内存中执行,临时存储RAM中
线程:点击应用(如电脑管家)的功能(病毒查杀、清理垃圾、电脑加速)执行就会开启一条应用程序到cpu的执行路径,CPU就可以通过这个路径执行功能,这个路径名字就叫线程。
线程属于进程,是进程中的一个执行单元,负责程序的执行。
单核心单线程CPU
CPU在多个线程之间做高速切换,轮流执行多个线程,效率低,切换速度(1/n毫秒)
多线程好处:
1.效率高
2.多个线程之间互不影响
线程调度
分时调度
所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间。
抢占式调度
优先让优先级高的程序使用CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性)。Java使用的为抢占式调度
设置线程的优先级
主线程
主线程:执行主(main)方法的线程
单线程程序:java程序中只有一个线程
执行从main方法开始,从上到下依次执行
JVM执行main方法,main方法会进入到栈内存
JVM会找操作系统开辟一条main方法通向cpu的执行路径
cpu就可以通过这个路径来执行main方法
而这个路径有一个名字,叫main(主)线程
package com.Thread;
/*
主线程:执行主(main)方法的线程
单线程程序:java程序中只有一个线程
执行从main方法开始,从上到下依次执行
JVM执行main方法,main方法会进入到栈内存
JVM会找操作系统开辟一条main方法通向cpu的执行路径
cpu就可以通过这个路径来执行main方法
而这个路径有一个名字,叫main(主)线程
*/
public class Demo01MainThread {
public static void main(String[] args) {
Person p1 = new Person("小强");
p1.run();
System.out.println(0/0); //in thread "main" java.lang.ArithmeticException:
Person p2 = new Person("旺财");
p2.run();
}
}
package com.Thread;
public class Person {
private String name;
public void run(){
//定义循环,执行20次
for (int i = 0;i<20;i++){
System.out.println(name+"--->"+i);
}
}
public Person(String name) {
this.name = name;
}
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}