Java基础(3)

Java中的线程

Java语言内置对多线程的支持(java.lang包中的Thread类)。多线程是指同时存在几个执行体,按几条不同的执行线索共同工作的情况,Java快速地把控制从一个线程切换到另一个线程。

程序时一段静态的代码,进程是程序的一次动态执行,对应了从代码加载、执行至执行完毕的一个完整过程,是其本身从产生、发展、消亡的过程。线程是比进程更小的执行单位。一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索,是每个线程,都有自身的产生、存在、消亡的过程,进程和线程都是动态的概念。

操作系统使用分时管理各个进程,按时间片轮流执行每个进程。Java的多线程就是在OS每次分时给Java程序的一个时间片的CPU时间内,在若干个独立的可控制的线程之间切换。每个进程都有一段专用的内存区域,线程间可以共享相同的内存单元(包括代码和数据),并利用共享单元实现数据交换、实时通信和必要的同步操作。

线程的生命周期

线程的4中状态:新建(有了相应的内存空间和其他资源)、运行(若是Thread的子类创建的,要在子类中重写父类的run()方法)、中断、死亡。

中断原因4种:

①  JVM将CPU资源从当前线程切换给其他线程,让本线程让出CPU的使用权处于中断状态。

②  线程使用CPU资源期间,执行了sleep(int millsecond)方法,使得线程进入休眠状态。立刻让出CPU的使用权,使当前线程处于中断状态,经过millsecond毫秒之后,该线程就重新进到线程队列中排队等待CPU资源,以便从中断处继续运行。

③  线程使用CPU资源期间,执行了wait()方法,使得当前线程进入等待状态。有其他线程调用notify()方法通知它,使得它能重新进到线程队列中排队等待CPU资源,以便从中断处继续运行。

④  线程使用CPU资源期间,执行某个操作进入阻塞状态,如执行读写操作引起阻塞。此时线程不能进入排队队列,只有引起阻塞的原因消除时,使得它能重新进到线程队列中排队等待CPU资源,以便从中断处继续运行。

 

死亡原因2种:

①  正常运行的线程完成了它的全部工作,即执行完run()方法中的全部语句,结束了run()方法;

②  线程被提前强制性终止,即强制run()方法结束。

所谓死亡状态,就是线程释放了实体,即释放分配给线程对象的内存。

 

线程的优先级与调度管理:10个级别(1-10):有些OS只有3个级别:1,5,10。

不提倡使用线程的优先级来保证算法的正确执行。

在采用时间片的系统中,每个线程都有机会获得CPU的使用权,以便使用CPU的资源执行线程中的操作。当线程使用CPU资源的时间结束后,即使线程没有完成自己的全部操作,Java调度器也会中断当前线程的执行,把CPU的使用权切换给下一个排队等待的线程,当前线程将等待CPU资源的下一次轮回,然后从中断处继续执行。

-------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值