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 ...
随机推荐
- ifup / ifdown eth0 / eno1 reports unknown interface when it exists!
li {list-style-type:decimal;}.wiz-editor-body ol.wiz-list-level2 > li {list-style-type:lower-lati ...
- CSS 0.5px 细线边框的原理和实现方式
细线边框的具体实现方法有:伪元素缩放或渐变,box-shadow模拟,svg画线,border-image裁剪等.要实现小于1px的线条,有个先决条件:屏幕的分辨率要足够高,设备像素比要大于1,即cs ...
- 10 tensorflow在循环体中用tf.print输出节点内容
代码 i=tf.constant(0,dtype=tf.int32) batch_len=tf.constant(10,dtype=tf.int32) loop_cond = lambda a,b: ...
- zTree实现权限列表简单实例
zTree的简单实例 zTree 是一个依靠jQuery 实现的多功能 "树插件".优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. zTree官网 zTreeAP ...
- Linux nl命令详解
nl常见命令参数 nl命令在linux系统中用来计算文件中行号 -b :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出行号(类似 cat -n): -b t :如果有空 ...
- Git使用本地仓库之基本操作
1.Git是什么? 一个分布式版本控制系统,和SVN类似,但远比SVN强大的一个版本控制系统 ①Git可以方便的在本地进行版本管理,如同你本地有一个版本管理服务器一样我们可以选择在合适的时间将本地版本 ...
- December 01st 2016 Week 49th Thursday
Life is a maze and love is a riddle. 生活是个迷宫,爱情是个谜语. I am lost in both. Can you provide me some guida ...
- 第2次作业——APP的案例分析
APP的案例分析 网易有道词典APP,使用这个软件有三年之久.唯独最爱的一点就是我每天都能听到不一样的英文歌看到创作歌手的来历,当然偶尔也会有其他国家的歌.起初使用这个软件的目的是用来查单词,每天积累 ...
- python 控制台单行刷新,多行刷新
先贴出单行刷新实现的进度条: 对于控制台的单行刷新,比较简单,先直接贴出代码: strarrs = ['/','|','\\'] for i in range(15): sys.stdout.writ ...
- 【转载】 socket recv 和 read
转自: http://blog.csdn.net/rankun1/article/details/50488989 send函数工作原理: send函数只负责将数据提交给协议层. 当调用该函数时,se ...