Java线程

Java线程

一,Java线程状态

在上一篇文章中,我们聊了聊线程与进程的关系,今天我们来聊一下Java的几种状态。在Java中,Java共分为7种状态,分别是born(新生状态),runnable(就绪状态),running(运行状态),waiting(等待状态),sleeping(睡眠状态),blocked(阻塞状态),dead(死亡状态)。那我们今天来仔细聊一聊这几种状态中的几种。

1, born(新生状态)

在一个Thread类之中,运用了new之后,会新生成一个线程,如果你只建立一个线程,而不对该线程进行任何的方法调用,则该线程会一直待在内存中,但是如果当对某一线程调用了start()方法之后,该线程就会进入runnable(就绪状态),之后系统的调度程序会把处理器分配给线程,如处理器分配给了线程,则该线程就会由runnable变为running状态。

2, runnable(就绪状态)

在刚才的born状态中,我们提到过,如果一个线程被调用了start()方法之后,线程会进入就绪状态,即进入runnable状态。如果一个线程进入了runnable状态,则说明该线程由运行的资格,但只是有这个资格,如果如果一个线程没有被系统的调度程序挑到,则该线程只是一个可以运行的线程。但还是没有进入到running(运行)状态。

3, running(运行状态)

如果一个线程与其他线程一样同时处于runnable状态,则系统的调度程序会选择优先级最高的线程运行,该线程则会进入running状态。
如果说一个线程被处理器划分为时间片,则一个处于running状态的线程将会被分配到一个固定间隔的处理器时间。具有相同优先级的线程的时间片调度将导致这些线程被轮流执行。
判断一个线程是否处于running状态,则需要运用Thread类的isAlive()方法,如果线程处于running状态,则会返回true,反之则会返回false;当返回false状态时,线程可能处于等待状态,也可能处于停滞状态。

4, blocked(阻塞状态)

当线程试图执行某个不能立即完成的任务,并且该线程必须等待其他任务完成时才能继续时,该线程就会进入blocked状态。当操作完成时,线程会重新进入runnable状态,能再次调用该线程,使其执行。

5, waiting(等待状态)

当某个线程的执行条件还未满足时,可以对该线程调用wait()方法,则该线程会进入到waiting状态。如果说一个线程一旦进入到waiting状态,需要另一个线程对其等待对象调用notify()方法时,该线程会自动重新进入到runnable状态。
如果一个线程waiting状态,除非被唤醒,否则会进入无限期的等待。

6, sleeping

现在设想一下,有一个线程有很撑的循环,执行完需要费城多的时间,那么就会影响到其他线程的执行,则可以通过调用sleep()方法在循环的每次迭代之后把该线程切换到sleeping状态,这样就可以使其他线程不必等待太多时间。但这里需要注意一下,sleep()方法的参数时毫秒,而另一个就是sleep()方法声明了InterruptedExcepyion异常。

7,dead

线程处于dead状态则说明有一下几种情况:

1,线程运行到run()方法的结尾。
2,线程抛出一个未捕获已成或Error.
3,调用interrupt()方法中断线程。
4,调用join()方法等待线程结束
5,调用stop()方法直接停止线程

当线程的run()方法用完时或线程的main()方法完成时,我们会认为该线程完成了,虽然这个对象可能时活的,但是此时这个线程已经不能在运行了,即线程一旦终止,就再也不能运行了,如果对一个终止的线程调用start()方法,那么系统会抛出一个java.lang.illegalThreadStateExcepyion异常。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值