java多线程学习(一)
一、操作系统线程和进程的概念
线程是指进程中的一个运行单元,这个过程中也可调度实体。
线程与进程的差别:
(1)地址空间:线程为进程内的一个运行单元。进程至少有一个线程(进程的主线程);进程的全部线程共享进程的地址空间。而进程有自己的独立的地址空间。
(2)资源拥有:进程是资源分配和拥有的单位。同一个进程内的线程共享进程的资源。
(3)线程是处理器调度的基本单元,但进程不是。
(4)进程和线程都能够并发运行。
通俗的讲就是:
进程是指一个内存中执行的应用程序,每一个进程都有自己独立的一块内存空间,一个进程能够启动多个线程。
线程是指进程中的一个执行流程,一个进程中能够执行多个线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。
二、java中的线程
在java中,“线程”指两件不同的事情。
1、java.lang.Thread类的一个实例。
2、线程的运行。
java中的线程使用java.lang.Thread类或者实现java.lang.Runnable接口来实现线程的定义,实例化和启动新线程。
一个Thread类实例仅仅是一个对象,和java中的不论什么其它对象一样,具有变量和方法,生死在堆上。
java中每一个线程都有一个调用栈,即使不在程序中创建不论什么新的线程,线程也在后台执行着。
java程序总是从main()方法開始执行,main()方法执行在一个线程内。这个即为主线程。
每次创建一个新的线程。就会产生一个新的调用栈。
线程的整体分类为两种:User Thread(用户线程)和Daemon Thread(守护线程)。
当全部的用户线程运行完成的时候。JVM会自己主动关闭。
守护线程通常是由操作系统或者用户自己创建的。
Daemon Thread的作用是为其它线程的执行提供服务的,比方说GC线程,User Thread和Daemon Thread的主要差别在于虚拟机的离开:假设User Thread所有撤离,那么Daemon Thread也就没有为啥线程提供服务了,所以虚拟机退出。
JRE推断程序是否运行结束的标准是全部的前台运行线程完成了。而无论后台线程的状态。
版权声明:本文博主原创文章。博客,未经同意不得转载。
java多线程学习(一)的更多相关文章
- Java多线程学习笔记
进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ...
- Java多线程学习(转载)
Java多线程学习(转载) 时间:2015-03-14 13:53:14 阅读:137413 评论:4 收藏:3 [点我收藏+] 转载 :http://blog ...
- java多线程学习笔记——详细
一.线程类 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...
- 【转】Java多线程学习
来源:http://www.cnblogs.com/samzeng/p/3546084.html Java多线程学习总结--线程概述及创建线程的方式(1) 在Java开发中,多线程是很常用的,用得好的 ...
- JAVA多线程学习笔记(1)
JAVA多线程学习笔记(1) 由于笔者使用markdown格式书写,后续copy到blog可能存在格式不美观的问题,本文的.mk文件已经上传到个人的github,会进行同步更新.github传送门 一 ...
- Java多线程学习(六)Lock锁的使用
系列文章传送门: Java多线程学习(二)synchronized关键字(1) Java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Java多 ...
- Java多线程学习(五)线程间通信知识点补充
系列文章传送门: Java多线程学习(二)synchronized关键字(1) Java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Java多 ...
- Java多线程学习(四)等待/通知(wait/notify)机制
转载请备注地址:https://blog.csdn.net/qq_34337272/article/details/79690279 系列文章传送门: Java多线程学习(一)Java多线程入门 Ja ...
- Java多线程学习(三)volatile关键字
转载请备注地址:https://blog.csdn.net/qq_34337272/article/details/79680693 系列文章传送门: Java多线程学习(一)Java多线程入门 Ja ...
- Java多线程学习(二)synchronized关键字(2)
转载请备注地址:https://blog.csdn.net/qq_34337272/article/details/79670775 系列文章传送门: Java多线程学习(一)Java多线程入门 Ja ...
随机推荐
- 深度分析 Java 的 ClassLoader 机制(源码级别)(转)
写在前面:Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中,JVM在加载类的时候,都是通过ClassLoa ...
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(四)
全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...
- BC 2015在百度之星程序设计大赛 - 预赛(1)(系列转换-二分法答案贪婪)
系列转换 Accepts: 816 Submissions: 3578 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 ...
- 【原创】POJ 1703 && RQNOJ 能量项链解题报告
唉 不想说什么了 poj 1703,从看完题到写完第一个版本的代码,只有15分钟 然后一直从晚上八点WA到第二天早上 最后终于发现了BUG,题目要求的“Not sure yet.”,我打成了“No s ...
- effective c++ 条款26 postpone variable definition as long as possible
因为构造和析构函数有开销,所以也许前面定义了,还没用函数就退出了. 所以比较好的方法是用到了才定义.
- C# WinForm多线程(二)ThreadPool 与 Timer
本文接上文,继续探讨WinForm中的多线程问题,再次主要探讨threadpool 和timer 一 ThreadPool 线程池(ThreadPool)是一种相对较简单的方法,它适应于一些需要多个 ...
- Xamarin.Android 使用 SQLiteOpenHelper 进行数据库操作
一.前言 在手机中进行网络连接不仅是耗时也是耗电的,而耗电却是致命的.所以我们就需要数据库帮助我们存储离线数据,以便在用户未使用网络的情况下也可以能够使用应用的部分功能,而在需要网络连接的功能上采用提 ...
- Java 将字节数组转化为16进制的多种方案
很多时候我们需要将字节数组转化为16进制字符串来保存,尤其在很多加密的场景中,例如保存密钥等.因为字节数组,除了写入文件或者以二进制的形式写入数据库以外,无法直接转为为字符串,因为字符串结尾有\0,当 ...
- cygwin,在win中开发linux程序
cygwin,在win中开发linux程序 http://www.cygwin.cn/site/info/show.php?IID=1001 很多用windows的朋友不习惯于用linux的开发环境 ...
- mysql 多个字段拼接
Mysql的查询结果行字段拼接,能够用以下两个函数实现: 1. concat函数 mysql> select concat('1','2','3') from test ; +--------- ...