弱弱的问一下java线程有几个状态??所谓“阻塞”到包含什么??

songchunyi 2010-12-15 07:21:44
我觉这就有:创建,就绪,运行,阻塞,停止
可老师说有七个状态,我到现在也不清楚
欢迎高手
...全文
1008 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zach_ZhouY 2010-12-24
  • 打赏
  • 举报
回复
http://wenku.baidu.com/view/ea967a09581b6bd97f19ea78.html
里面有对Java线程的详细介绍 是Word文档 不错的 推荐你看
night__cat 2010-12-24
  • 打赏
  • 举报
回复
轮流享用cpu
wenlin56 2010-12-18
  • 打赏
  • 举报
回复
忘了广告:http://blog.csdn.net/wenlin56
原创 android、struts、lucene、spring-survey 教程
wenlin56 2010-12-18
  • 打赏
  • 举报
回复
一条路,只能供一个人过,现在一个大胖子吃太多了,说要倒在路边睡一觉,等消化好了再走。那么没办法,后面要过的人,只有等着胖子消化完了,醒过来了,再走。
多线程的解决方案是,后面有聪明人士,想干脆不走这条路,于是从旁开一条路,两条路互不影响。
py330316117 2010-12-18
  • 打赏
  • 举报
回复
百度查不到吗??? 去搜索cpu的状态基本上和java线程的状态一样,学过操作系统应该能知道,都是内存的状态问题
yaochunpin 2010-12-18
  • 打赏
  • 举报
回复
阻塞就是堵在那呗,等收到服务器或客户端的连接要求或数据包时在执行下面的代码!O(∩_∩)O~我的理解,也是一知半解的!他们说的好高深,不懂!
zn85600301 2010-12-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 eswn 的回复:]

等待和池锁是阻塞的一种
实际来说对于编码来说,Java对外只有五/六种状态:
BLOCKED,NEW,RUNNABLE,TERMINATED,TIMED_WAITING/WAITING
[/Quote]
恩 大家都说的挺好
5,6,7种都无所谓 你了解线程的生命周期和使用方法就好了
yukiMark 2010-12-16
  • 打赏
  • 举报
回复
什么情况下会用到多线程呢 ?
fantasy0126 2010-12-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dyllove98 的回复:]

BLOCKED,NEW,RUNNABLE,TERMINATED,TIMED_WAITING/WAITING
[/Quote]

从java se5 开始吧就是这6种 Thead类的
public Thread.State getState()
uastation 2010-12-15
  • 打赏
  • 举报
回复
1、新状态:线程对象已经创建,还没有在其上调用start()方法。

2、可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。当start()方法调用时,线程首先进入可运行状态。在线程运行之后或者从阻塞、等待或睡眠状态回来后,也返回到可运行状态。

3、运行状态:线程调度程序从可运行池中选择一个线程作为当前线程时线程所处的状态。这也是线程进入运行状态的唯一一种方式。

4、等待/阻塞/睡眠状态:这是线程有资格运行时它所处的状态。实际上这个三状态组合为一种,其共同点是:线程仍旧是活的,但是当前没有条件运行。换句话说,它是可运行的,但是如果某件事件出现,他可能返回到可运行状态。

5、死亡态:当线程的run()方法完成时就认为它死去。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦死亡,就不能复生。 如果在一个死去的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。

引自:http://lavasoft.blog.51cto.com/62575/99153
uastation 2010-12-15
  • 打赏
  • 举报
回复
1、线程的实现有两种方式,一是继承Thread类,二是实现Runnable接口,但不管怎样,当我们new了这个对象后,线程就进入了初始状态;

  2、当该对象调用了start()方法,就进入可运行状态;

  3、进入可运行状态后,当该对象被操作系统选中,获得CPU时间片就会进入运行状态;

  4、进入运行状态后情况就比较复杂了

  4.1、run()方法或main()方法结束后,线程就进入终止状态;

  4.2、当线程调用了自身的sleep()方法或其他线程的join()方法,就会进入阻塞状态(该状态既停止当前线程,但并不释放所占有的资源)。当sleep()结束或join()结束后,该线程进入可运行状态,继续等待OS分配时间片;

  4.3、线程调用了yield()方法,意思是放弃当前获得的CPU时间片,回到可运行状态,这时与其他进程处于同等竞争状态,OS有可能会接着又让这个进程进入运行状态;

  4.4、当线程刚进入可运行状态(注意,还没运行),发现将要调用的资源被synchroniza(同步),获取不到锁标记,将会立即进入锁池状态,等待获取锁标记(这时的锁池里也许已经有了其他线程在等待获取锁标记,这时它们处于队列状态,既先到先得),一旦线程获得锁标记后,就转入可运行状态,等待OS分配CPU时间片;

  4.5、当线程调用wait()方法后会进入等待队列(进入这个状态会释放所占有的所有资源,与阻塞状态不同),进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒(由于notify()只是唤醒一个线程,但我们由不能确定具体唤醒的是哪一个线程,也许我们需要唤醒的线程不能够被唤醒,因此在实际使用时,一般都用notifyAll()方法,唤醒有所线程),线程被唤醒后会进入锁池,等待获取锁标记。

引自:http://webservices.ctocio.com.cn/java/423/9092423.shtml
Jlins 2010-12-15
  • 打赏
  • 举报
回复
BLOCKED,NEW,RUNNABLE,TERMINATED,TIMED_WAITING/WAITING
龙四 2010-12-15
  • 打赏
  • 举报
回复
说白了,jvm不就是一个微型的操作系统么

《现代操作系统》一书中就有关于虚拟机中线程的实现的介绍,有些科班用的这本书吧?

[Quote=引用 4 楼 ileson 的回复:]

引用 3 楼 ticmy 的回复:
科班不都要学《操作系统》这门课么?!

但科班不讲jvm是怎么设计的。
[/Quote]
Leson_Yin 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ticmy 的回复:]
科班不都要学《操作系统》这门课么?!
[/Quote]
但科班不讲jvm是怎么设计的。
龙四 2010-12-15
  • 打赏
  • 举报
回复
科班不都要学《操作系统》这门课么?!
eswn 2010-12-15
  • 打赏
  • 举报
回复
等待和池锁是阻塞的一种
实际来说对于编码来说,Java对外只有五/六种状态:
BLOCKED,NEW,RUNNABLE,TERMINATED,TIMED_WAITING/WAITING

shaosijun2004 2010-12-15
  • 打赏
  • 举报
回复
http://wenku.baidu.com/view/ea967a09581b6bd97f19ea78.html

楼主SEE SEE吧,图文教程

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧