多线程
多线程是我们Java学习中必学的知识,在这里我们浅泛的理解一下多线程。程序、进程、线程的区别是什么?
程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。
进程(process)是程序的一次执行过程,或是正在运行的一个程序。
线程(thread)进程可进一步细化为线程,是一个程序内部的一条执行路径。
多线程和单线程
单线程:一个程序里面只执行了一个线程,就叫单线程
多线程:一个程序里面只执行了多个线程,就叫多线程
调用多线程方法
调用多线程的时候,如果直接调用该类中的run()方法名字 就是普通调用了,和我们平时自定义的方法没有区别。所以需要调用 start() 启动线程。注:
主线程: main
守护线程: gc (垃圾回收器)
public class Test01 {
public static void main(String[] args) {
//这里顺序调用 使用run方法,执行的就是普通方法
//Thread thread = new Test();
//thread.run();
//
//Thread thread2 = new Test();
//thread2.run();
Thread thread = new Test();
Thread thread2 = new Test();
//jvm 会用多线程的方法调用run方法
thread.start();
thread2.start();
//这个执行输出的时间不确定 可能是在上面的线程完成之前 也可能是之后 取决于是否抢到CPU
System.out.println("================");
//这里调用方法 取得当前线程的名字
System.out.println(thread.currentThread().getName());
}
}
class Test extends Thread{
public void run(){
for (int i = 0; i < 1000; i++) {
System.out.println("zhuxiancheng "+i);
}
}
}
在main中,我们可以见到先是 thread.start() 然后是 thread2.start() 最好才是输出"======="和线程名字,但是在运行的时候并不是按照顺序运行的,而是看谁能够抢到CPU运行时间,往往是交叉运行。
就像图片中的运行结果一样,先是运行时输出"==========="然后是执行线程0 而后是 线程1 再输出 线程名字,最后线程 0 和线程 1 交叉运行完成。此处的 0 和1 是机器默认给线程定义的名字。
线程什么时候开始执行并不确定,第一次运行可能是图中的顺序,但下一次执行就不一定还是这个顺序了。