Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 704|回复: 0

Java线程基本概念

[复制链接]

该用户从未签到

发表于 2011-9-13 15:16:49 | 显示全部楼层 |阅读模式
1.       概念:
程序:一段静态代码,是应用软件执行的蓝本。
进程:是程序的一次动态执行,对应从代码的加载,执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到消亡的过程。
线程:是比进程更小的单位,一个进程在执行过程中,可以产生多个线程,形成多条执行线索,每个线程都有它自身的产生、存在和消亡的过程,是一个动态概念。
多线程:同时存在几个执行体,按几条不同的执行线索共同工作的情况。这可能会给人一种错觉:几个事件同时发生。但是不要忘了:任意时刻只能执行其中一个线程。
进一步了解线程和进程:操作系统采用分时管理各个进程,按时间片轮流执行每个进程。java的多线程就是操作系统每次分时给JAVA程序一个时间片的CPU时间内,在若干个可独立控制的线程之间切换。若计算机有多个处理器,若JVM能充分利用这些CPU,那么程序在同一时刻就能获得多个时间片,程序就可以获得真实的同步线程执行效果。
每个进程都有一段专用的内存区域。与此不同的是线程间可以共享相同的内存单元,包括代码和数据,并充分利用这些共享单元实现数据交换、实时通信和必要的同步操作。
Java总是从main方法入口执行程序,这就启动一个线程,称为主线程,主线程中可以创建其他线程。如果Main方法中没有其它线程,当main方法返回时,JVM就结束JAVA程序;当MAIN方法中有其它线程时,那么JVM就要在主线程和其它线程间轮流切换。保证每个线程都能机会使用CPU资源,mian方法即使执行完最后一句,JVM也不会结束该程序,一直等到主线程中所有线程都结束后,才结束该JAVA应用程序。
2.       线程的状态和生命周期
a)         新建
当一个thread类或其子类的对象被声明并创建时,新生的线程线程对象处于新建状态。此时它有了相应的内存空间和资源,并被初始化
b)        就绪
处于新建状态的线程被启动,进入线程队列排队等候CPU时间片,此时它已经具备运行条件,一旦轮到它享有cpu资源时,就可以脱离创建它的主线程独立开始自己的生命周期。另外,原来处于阻塞状态的线程被解除阻塞后也进入就绪状态。
c)        运行
d)        中断
原因:
1,  JVM将CPU资源从当前线程切换到其它线程
2,  执行了sleep(int millsecond)方法,使当前线程进入休眠状态
3,  使用CPU资源期间执行了wait()方法,进入等待状态,
4,  运行期间执行某些操作,如读/写引起阻塞,
e)    死亡
原因:
1,  完成了全部工作
2,  提前强制性中止
创建线程:
1,  继承thread类
可以扩展thread类,但要重写run()方法。
优点:可以在子类中增加新的成员变量,使线程具有某种属性,也可以在子类中新增加方法但不能扩展其它类。
2,  Runable接口
用Thread类直接创建线程对象,使用构造方法thread(Runnable o),参数为Runnable类型接口,strat()执行后,一旦享有CPU资源,目标对象会自动调用接口中的run()方法(接口回调),这一过程自动实现,用户只要让它线程调用start()方法即可。Runnable接口只有一个方法run(),它比较特殊,由系统自动识别和执行。
优点:线程间可共享相同的内存单元,并利用这些共享单元实现数据交换,实时通信和必要的同步操作,轮到Thread()构造方法创建的线程享有CPU时,目标对象就会自动调用接口中的run()方法。因此,对于使用同一对象的线程,目标对象的成员变量自然就是这些线程共享的数据单元。另外创建目标对象的类在必要时还可以是某个特定类的子类,因此使用Runnable接口比使用Thread类更具有灵活性。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-5 00:27 , Processed in 0.435620 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表