java线程理解001
概念:线程和进程
进程:简单的说,进程就是一个应用,即一个程序。现在的操作系统普遍都是多进程的操作系统。比如:你可以同时打开音乐播放器,也可以同时打开浏览器和视频播放器。
线程:线程,存在于进程之中,理解为一个进程中有多个线程。现在的程序也大多是多线程程序。比如:一个音乐播放器既可以同时播放音乐,也可以同时下载音乐。
单线程和多线程的执行顺序:
单线程程序执行:线程执行逐步向下,最终结束。
多线程程序执行:两个线程间快速切换(抢夺CPU资源),获得CPU资源的执行向下
注:多线程本质上也是单线程程序,只是由于CPU切换很快很快,给我们的错觉就是两个任务同时进行。
线程的执行过程:
1.实例化一个线程对象并调用start()方法,线程进入就绪状态(可以去抢占CPU资源)。
2.当获取到CPU资源时,进入Running状态(执行状态)。
3.Running状态时,可能遇到其他情况(比如访问网络时没有资源),就如阻塞Blocked状态,当接触了阻塞是进入就绪状态。
4.当run()方法执行完毕后,该线程死亡Dead;
由以上线程运行推断出,线程的主要方法写在run()方法中,也称run()方法体为线程体。
例子分析:
测试类主函数:
package interThread_v001; public class Test_v001 { public static void main(String args[]) { // 实例化Thread对象 Thread_v001 tv = new Thread_v001(); // 启动线程 -->进入就绪状态 tv.start(); // tv.run(); for (int i = 0; i < 100; i++) { System.out.println("mainThread-->" + i); } } } //线程类:(重写了run()方法) package interThread_v001; public class Thread_v001 extends Thread { // 继承jdk提供的Thread类,重写run()方法 public void run() { for(int i = 0; i < 100;i++) { System.out.println("Thread_v001-->" +i); } } }
执行结果:
分析:由执行结果可以看出:其中两个循环是相互交叉执行(执行顺序不定)的,其中先实例化线程对象,并调用start()方法,进入就绪状态,并和主函数(for循环)抢占CPU,抢占到的先执行。
从中可以看出,线程的执行是混乱的,并且是不可控的。
注意:线程对象不能直接调用run()方法,如果直接调用,就是单线程了,不存在抢占的概念。