欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java核心技术-多线程之线程基础

程序员文章站 2022-06-28 19:22:41
说起线程,无法免俗首先要弄清楚的三个概念就是:进程、线程、协程。OK,那什么是进程,什么是线程,哪协程又是啥东西。进程:进程可以简单的理解为运行在操作系统中的程序,程序时静态代码,进程是动态运行着的代码,程序的运行需要向操作系统申请资源比如内存,文件句柄等,特别强调的是进程申请的资源都是独立的,也就 ......

  说起线程,无法免俗首先要弄清楚的三个概念就是:进程、线程、协程。ok,那什么是进程,什么是线程,哪协程又是啥东西。进程:进程可以简单的理解为运行在操作系统中的程序,程序时静态代码,进程是动态运行着的代码,程序的运行需要向操作系统申请资源比如内存,文件句柄等,特别强调的是进程申请的资源都是独立的,也就是进程与进程之间资源是独立的。它被操作系统调度,所以进程是相对于操作系统的;线程:线程是进程中程序执行任务的那个,它共享着进程申请的资源;协程:可以简单的说是线程制造的轻量线程。讲完了基本的概念看看三者之前的关系图:

java核心技术-多线程之线程基础

从关系图看是不是一目了然。对了还要强调的一点是,进程和线程都是之间或者间接受管于操作系统内核的,而协程是受管于程序,在用户态这边。既然讲到java线程,那java协程咋没听说过呢,java语言没有实现协程,实现协程的语言如python,go等,如果想在java中使用协程咋办,你可以使用协程框架kilim。

  讲完概念,直接进入java线程的世界。在java中线程可以使用thread类构造一个线程对象,没错new thread()就是一个线程对象了,和new date()没什么区别,就是一个java 对象实例而已,是不是很简单?这里的简单是指构造简单,但是引入之后的问题可就不简单啦(后面会讲)。我们知道对象自身是有生命周期的,普通java对象就是死与活两种生命周期状态,而对于线程对象则存在new、ready、running、block或者waitting、dead六种状态,状态转换图:

java核心技术-多线程之线程基础

线程状态的转换是依靠jvm调用操作系统内核tcb也就是线程控制模块来实现线程状态切换的。

    既然线程在java中也是个对象,那么这个对象的属性又有哪些呢?线程的属性可分为静态和动态属性,静态这里指的是,程序员不可改变的,是有jvm分配的,动态是指程序员可以自定义的虽然jvm给了默认属性值。静态属性:id等;动态属性:name,priority,deamon,group,classloader等。讲了这么多基础的东西,那来实践下才是王道。

java核心技术-多线程之线程基础

从上面程序可以看出,我们运行程序的时候,相当于在操作系统中启动一个jvm的应用程序,也就是进程,然后jvm调用main方法,执行这个main方法的线程是主线程(也就是进程中必然有个入口线程-main thread,即至少一个线程),然后main线程启动了一个子线程。

    好了,java线程基础入门篇就介绍到这,下一篇继续线程基础部分的线程内存分配知识。特别说明,本人技术和认识有限,如有错误之处,欢迎朋友们指正,万分感谢。