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 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算