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()方法,如果直接调用,就是单线程了,不存在抢占的概念。

原文地址:https://www.cnblogs.com/BeyondAverage0908/p/4020531.html