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

从关系图看是不是一目了然。对了还要强调的一点是,进程和线程都是之间或者间接受管于操作系统内核的,而协程是受管于程序,在用户态这边。既然讲到java线程,那java协程咋没听说过呢,java语言没有实现协程,实现协程的语言如python,go等,如果想在java中使用协程咋办,你可以使用协程框架kilim。
讲完概念,直接进入java线程的世界。在java中线程可以使用Thread类构造一个线程对象,没错new Thread()就是一个线程对象了,和new Date()没什么区别,就是一个java 对象实例而已,是不是很简单?这里的简单是指构造简单,但是引入之后的问题可就不简单啦(后面会讲)。我们知道对象自身是有生命周期的,普通java对象就是死与活两种生命周期状态,而对于线程对象则存在new、ready、running、block或者waitting、dead六种状态,状态转换图:

线程状态的转换是依靠JVM调用操作系统内核TCB也就是线程控制模块来实现线程状态切换的。
既然线程在java中也是个对象,那么这个对象的属性又有哪些呢?线程的属性可分为静态和动态属性,静态这里指的是,程序员不可改变的,是有jvm分配的,动态是指程序员可以自定义的虽然jvm给了默认属性值。静态属性:id等;动态属性:name,priority,deamon,group,classloader等。讲了这么多基础的东西,那来实践下才是王道。

从上面程序可以看出,我们运行程序的时候,相当于在操作系统中启动一个jvm的应用程序,也就是进程,然后jvm调用main方法,执行这个main方法的线程是主线程(也就是进程中必然有个入口线程-main thread,即至少一个线程),然后main线程启动了一个子线程。
好了,java线程基础入门篇就介绍到这,下一篇继续线程基础部分的线程内存分配知识。特别说明,本人技术和认识有限,如有错误之处,欢迎朋友们指正,万分感谢。
java核心技术-多线程之线程基础的更多相关文章
- java核心技术-多线程之线程内存模型
对于每一种编程语言,理解它的内存模型是理所当然的重要.下面我们从jvm的内存模型来体会下java(不限java语言,严格来讲是JVM内存模型,所有JVM体系的变成语言均适用)的内存模型. 堆: 就是我 ...
- Java:多线程,线程同步,同步锁(Lock)的使用(ReentrantLock、ReentrantReadWriteLock)
关于线程的同步,可以使用synchronized关键字,或者是使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象.本文探讨Lock对象. synchronize ...
- C#当中的多线程_线程基础
前言 最近工作不是很忙,想把买了很久了的<C#多线程编程实战>看完,所以索性把每一章的重点记录一下,方便以后回忆. 第1章 线程基础 1.创建一个线程 using System; usin ...
- C#多线程开发-线程基础 01
最近由于工作的需要,一直在使用C#的多线程进行开发,其中也遇到了很多问题,但也都解决了.后来发觉自己对于线程的知识和运用不是很熟悉,所以将利用几篇文章来系统性的学习汇总下C#中的多线程开发. 线程基础 ...
- java核心技术-多线程基础
进程.线程 进程(Process) 是程序的运行实例.例如,一个运行的 Eclipse 就是一个进程.进程是程序向操作系统申请资源(如内存空间和文件句柄)的基本单位.线程(Thread)是进程中可 ...
- java核心-多线程(4)-线程类基础知识
1.并发 <1>使用并发的一个重要原因是提高执行效率.由于I/O等情况阻塞,单个任务并不能充分利用CPU时间.所以在单处理器的机器上也应该使用并发. <2>为了实现并发,操作系 ...
- Java多线程(一)——线程基础和锁锁锁
目录 Java多线程(一) 一.线程的定义 二.Synchronize线程同步 三.偏向锁.自旋锁.重量级锁 四.volatile关键字 五.Compare And Swap无锁自旋优化技术和ABA版 ...
- java核心技术-多线程之引导概念
前两篇文章分别讲了,Java线程相关基础概念以及线程的内存模型,本节作为后续章节的引导,个人认为对于学习后面的只是还是比较重要.好了,既然说了多线程,那么首先要弄清以下几个问题: 1. 什么是多线程? ...
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
1. 背景 在Java5的多线程中,可以使用Callable接口来实现具有返回值的线程.使用线程池的submit方法提交Callable任务,利用submit方法返回的Future存根,调用此存根的g ...
随机推荐
- sql 内连接 子查询 合并查询
-- 内连接:-- 显示员工姓名.工资和公司所在地 select e.ename, e.sal, d.dname from emp e,dept d; -- 笛卡尔积 select e.ename, ...
- jsonp promise封装
npm 安装jsonp import originJSONP from 'jsonp' export default function jsonp(url, data, option){ url += ...
- 8 tensorflow修改tensor张量矩阵的某一列
1.tensorflow的数据流图限制了它的tensor是只读属性,因此对于一个Tensor(张量)形式的矩阵,想修改特定位置的元素,比较困难. 2.我要做的是将所有的操作定义为符号形式的操作.也就是 ...
- PHP生成随机或者唯一字符串
本文出至:新太潮流网络博客 /** * [生成随机字符串] * @E-mial wuliqiang_aa@163.com * @TIME 2017-04-07 * @WEB http://blog.i ...
- SQL Server ->> 使用CROSS APPLY语句是遇到聚合函数中包含外部引用列时报错
本次遇到的问题是CROSS APPLY的内部查询语句中的聚合函数包含CASE WHEN判断,且同时又内部语句的表的列和外部引用的表的列,此时会报下列的错误. 消息 8124,级别 16,状态 1,第 ...
- JAVA两种代理模式
简单设计动态代理,基本模拟spring的动态代理方式. before afterReturning around afterException after这些通知方法都可以这块模拟出来 spring的 ...
- 使用mac版思维导图软件MindNode
下载地址 http://pan.baidu.com/s/1hq3fUVq 思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又极其有效,是一种革命性的思维工具.思维导图运用图文并重的 ...
- 设置全局context变量 (显示用户登录名)
比如在每个页面的最上面部分需要显示用户的登录名称,如果不登录则显示为Guest.这部分内容在每个页面都会出现,所以可将该部分内容作为一个公共模板(如userauth.html),如然后在其他模板中进行 ...
- MATLAB 正则表达式(一)(转)
http://blog.sina.com.cn/s/blog_53f29119010009uf.html 正则表达式这个词上大学的时候就听同寝室的一个家伙常念叨——那家伙当然很厉害啦,现在已经发洋财去 ...
- 生成器-yield初接触
什么是生成器? 生成器的实质就是迭代器 在python中有三种方式来获取生成器 1. 通过生成器函数 2. 通过各种推导式实现生成器 3. 通过数据的转换也可以获取生成器 将函数中的return换成y ...