当前位置:  技术问答>java相关

高分,关于线程的讨论(在线)

    来源: 互联网  发布时间:2015-10-12

    本文导语:  java中线程共有四种状态:new,runnable,blocked,dead. 我的问题是: 1。线程运行结束,进入dead 状态,那么还能进入runnable状态吗? 2。线程在dead状态下,是否会释放所占用的资源,什么情况下进行。 | ...

java中线程共有四种状态:new,runnable,blocked,dead.
我的问题是:
1。线程运行结束,进入dead 状态,那么还能进入runnable状态吗?
2。线程在dead状态下,是否会释放所占用的资源,什么情况下进行。

|
线程结束不能从新启动,除非新生成线程.释放资源由GC完成,只要是没有用的符合GC条件的,都release.

|
线程还有别的状态吗?
我系统内的线程不知道进入什么状态,连interrupt都不行,一直在占着cpu运行

|
1。不能
2。会

|
老弟,你从哪里听说线程是这四种状态呀?
线程对于任何语言都一样的,它不属于语言的概念(只是java在语言级上支持多线程)。线程只有如下四种状态:运行,挂起(睡眠),就绪(等待),结束(死亡)。你说的dead就是最后一种,在java中有两种方式,一种是自然结束,一种强制dead,不过为了安全性和稳定性,最好只用第一种。线程运行完了并不代表线程类被回收了,你依然可以再用,再次运行就是。
另外,java中没有提供自行回收对象,这个是由它的垃圾回收器自动回收,你并不知道何时何地进行这样的处理。所以线程完毕,并不代表资源回收,当然除了数据库连接,网络连接,流连接可以close外(这个也要自己进行释放)。如果你不想多余太多的废弃的对象,你可以在结束后,将线程类的主要域设置为null,它们因为而成为弱引用对象,是优先被垃圾回收器回收的
    好了,老弟,好好看看书,希望你成为高手

|
基本同意hh-fwhy的观点,但是
“线程运行完了并不代表线程类被回收了,你依然可以再用,再次运行就是。”

“线程类的主要域设置为null,它们因为而成为弱引用对象”
好像不太对,也可能使我理解错你的话了

第一句话是不是指t.start();等到t结束,还可以t.start()?
如果你是这样认为的话,那就错了,例子如下
class CCC 
{
public static void main(String[] args) 
{
T t = new T();
t.start();
//wait for a second till T dead
try
{
Thread.sleep(1000);
}
catch (Exception e) {System.out.println(e);}
t.start();
}
}
class T extends Thread
{
public void run()
{
System.out.println("Run called");
}
};
结果只有一个Run called打印出来,详情请参阅Core Java Volume 2 第 11 页图

第二句话,也很不解,原因有二
1.释放线程的各个域,应该是此线程的引址计数器为0,也就是说没有Thread的引用指像此线程,通常是t=null,而不是t.name=null;t.sex=null;t.age=null;.......
2.你说的弱引用应该是这个吧?
java.lang.Object
  |
  +--java.lang.ref.Reference
        |
        +--java.lang.ref.WeakReference
这是从JDK1.2开始引入的,WeakReference不会被对象引址计数器记录,所以就算这样的引用仍存在,只要没有普通引用,他就可以被释放。IBM developerworks有一片详述。你用在这里,“将线程类的主要域设置为null,它们因为而成为弱引用对象”我不太懂。
本人愚见,还请海纳

|
不是我给Horstmann做广告,你真该看看这本书,非常不错
不过机械工业出版社的老毛病,翻译太一般

|
假设P(producer)和C(Consumer)同时操作缓冲区,而且方法是同步的
如果P发现缓冲区慢,用wait() block自己,把自己放入等待队列。让C有机会去取。C取完之后,告诉P,你可以继续生产。
如果C发现缓冲区空,用wait() block自己,把自己放入等待队列。让P有机会去放。P放完之后,告诉C,你可以继续取。
双方都要notify(),或者notiryAll()
则此例中,notify和notifyAll一样
在多个线程的情况下,notifyAll更好一些,
有个例子

public class ThreadTest
{
final static int maxOperations = 20;
static int operatons = 0;

WareHouse warehouse = new WareHouse();
Producer pro = new Producer();
Consumer con = new Consumer();

public static void main(String[] args) 
{
ThreadTest test = new ThreadTest();
test.beginTest();
}
public void beginTest()
{
pro.start();
con.start();
}


class Producer extends Thread
{
int operations = 0;
public void run()
{
System.out.println("Producer started");
try
{
while(operations 

    
 
 

您可能感兴趣的文章:

  • 高分求c 实现线程池的一个实例
  • Linux里哪些地方用到多线程编程?高分求
  • 高分噢!内核线程绑定问题!急!!!
  • 线程组的问题???????????(高分)
  • [高分求解]tomcat 4.0.X中servlet是不是不能启动一个新的线程?如果可以,该如何做?
  • 线程问题(高分相送)
  • 高分求win32多线程api转换为linux的具体实现代码
  • 求高手详解 linux多线程的若干问题 ,高分相送
  • 为什么我建立了一个线程后窗口上其它按钮就无法响应了。(高分求救)
  • 高分求pthread线程挂起程序!!!
  • 线程组问题,高手看看,高分!真的高分!
  • 大家讨论一下, 如何用Applet 去读 XML 文件? 高分!
  • 系统维护后百思不得其解?关于编码,高分相送,欢迎讨论
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 谁参加过weblogic的证书考试,是否有经验可供参考?高分高分高高分
  • 哪里有JB6下载啊,高分相送,救命
  • 高分求救!我在uclinux上运行应用程序时出现内存分配错误,不知如何解决,解决者高分!!
  • 哪里去找中文的EJB文章?高分悬赏!
  • 有jsp的upload和download 代码么,高分相报!
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 高分寻求jsp代码(网上调查系统,新闻发布系统)就这点分了
  • 高分求购做饼图、线形图的源吗?
  • 关于linu下的中文输入.(高分:300)
  • 一个简单的问题,高分求助!!!
  • 高分求购jbulider6得注册码,企业版本,个人版本都要
  • Linux远程访问的问题,高分求教:)
  • 请问哪儿有Solaris8的光盘映像文件下载???高分相赠!!!
  • 高分求“Ration Rose”&"JBuilder6.0"&"VisualCafe"
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求购:linux和unix命令大全电子文档
  • 急救:关于BLOB数据类型---在线等待,高分相送!
  • 求UNIXWARE7.11的原版下载,高分相赠,在线等待!!!
  • 关于java?高分相送!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3