caizhen_n0207 2009-08-20 20:56
浏览 285
已采纳

jdk1.4如何判断线程状态?

在JDK1.5中有getState()方法和Thread.State类可以判断线程的状态,但是现在老大说必须在1.4上实现多线程的一些功能,怎么才能在1.4上判断线程是否正常结束,是否是新线程……,???
[b]问题补充:[/b]
不好意思,可能是我的问题没有描述清楚.我再重新说明一下.现在要求在JDK1.4版本上进行一个多线程的开发.在这么几种状态需要判断:1.线程是否是新建未执行的;2.线程是否是在执行中;3.线程是否正常执行完毕;4.线程是否发生异常。而isInterrupted()只是测试是否异常中止,isAlive()也只是测试线程是否还活着,但相关文档并没有说明如果isAlive()返回false则表明线程正常中止。
于是我想到继承Thread类,然后添加一个线程状态,在构造方法中将状态置为新增,在start()方法前将线程置为已启动:
[code="java"]

public class ThreadTask extends Thread {

/**
 * 线程状态:新建
 */
public final static int THREAD_STATE_NEW = 0;

/**
 * 线程状态:执行中
 */
public final static int THREAD_STATE_EXEC = 1;

/**
 * 线程状态:意外中止
 */
public final static int THREAD_STATE_INTERRUPTED = 2;

/**
 * 线程状态:执行完毕
 */
public final static int THREAD_STATE_OVER = 3;

/**
 * 线程状态
 */
private int state = 0;

public ThreadTask(ThreadGroup tg, Runnable run) {
    super(tg, run);
    chgStat(THREAD_STATE_NEW);
}

public void start() {
    chgStat(THREAD_STATE_EXEC);
    super.start();
}

private synchronized void chgStat(int stat) {
    this.state = stat;
}

}
[/code]
但是应该如何确定执行正常执行完毕呢?

  • 写回答

3条回答 默认 最新

  • walsh_bupt 2009-08-21 11:15
    关注

    你的思路,给我说的一样,你自己继承1.4中的Thread,就是说扩展它的功能,上面已经说了,你可以参考JDK1.5中的设计,但是难点就是:里面这个方法

    [code="java"]public State getState() {

    // get current thread state

    return sun.misc.VM.toThreadState(threadStatus);

    } [/code]

    会调用sun.misc.VM.toThreadState(int threadStatus)这个方法,关于这个类,我也把网址给你了,你自己看看吧

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站