Java 如何计算线程被挂起的次数

Java 如何计算线程被挂起的次数,java,multithreading,runnable,Java,Multithreading,Runnable,我正在用java编写一个非常简单的程序,尽管我是一名学生。我制作了一个程序,在1000时计数1,当数字是2的倍数时,线程将暂停大约500毫秒。没关系。但是在最后,我需要显示线程被挂起了多少次。像 System.out.println("The thread has been suspended for: " ); 我不知道。谢谢你的帮助 @Override public void run () { for (int i = 0; i < 1000; i++) {

我正在用java编写一个非常简单的程序,尽管我是一名学生。我制作了一个程序,在1000时计数1,当数字是2的倍数时,线程将暂停大约500毫秒。没关系。但是在最后,我需要显示线程被挂起了多少次。像

System.out.println("The thread has been suspended for: " );
我不知道。谢谢你的帮助

@Override
public void run () {
    for (int i = 0; i < 1000; i++) {
        if (i % 2 == 0) {
            try {
                System.out.println(i);
                Thread.sleep(500);

            } catch (InterruptedException ex) {
                Logger.getLogger(ThreadNumeros.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    System.out.println("thread has been suspended for: ");
}
@覆盖
公开作废运行(){
对于(int i=0;i<1000;i++){
如果(i%2==0){
试一试{
系统输出打印LN(i);
睡眠(500);
}捕获(中断异常例外){
Logger.getLogger(ThreadNumeros.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
System.out.println(“线程已暂停:”);
}
不要将(暂停)和(睡眠)混在一起:它们的工作方式不同

Thread.sleep()
在一段时间内处于“可运行”状态。线程保存监视器
它已获取--即线程当前是否处于同步状态
块或方法没有其他线程可以进入此块或方法。如果
另一个线程调用
t.interrupt()
它将唤醒休眠线程 线

t.suspend()
已弃用。使用它可以停止一个进程 当前线程以外的其他线程。挂起的线程保留其所有属性 监视器,由于此状态不可中断,因此为死锁 俯卧的

stop()、suspend()、resume()
是用于线程的方法 实施<代码>停止() 如果已停止,则无法使用
start()
方法重新启动,因为
stop()
将终止线程的执行。相反,你可以暂停 使用
sleep()
方法执行线程。这根线会 睡眠一段时间,然后在 时间到了。但是,如果线程需要 当某个事件发生时启动。在这种情况下,
suspend()
方法允许线程临时停止执行<代码>恢复()
方法 允许挂起的线程重新启动

同步-:如果将任何方法声明为
已同步
,则称为“已同步方法”

同步方法用于锁定任何共享资源的对象

当线程调用同步方法时,它会自动获取 该对象的锁,并在线程完成其任务时释放它 任务

像这样尝试-:

@Override
public void run() {
int count = 0;
    for (int i = 0; i < 1000; i++) {
        if (i % 2 == 0) {
            try {
                System.out.println(i);
                Thread.sleep(500);
                count+=1

            } catch (InterruptedException ex) {
                Logger.getLogger(ThreadNumeros.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    System.out.println("thread has been suspended for: "+count);

}
@覆盖
公开募捐{
整数计数=0;
对于(int i=0;i<1000;i++){
如果(i%2==0){
试一试{
系统输出打印LN(i);
睡眠(500);
计数+=1
}捕获(中断异常例外){
Logger.getLogger(ThreadNumeros.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
System.out.println(“线程已暂停:“+count”);
}

有要显示的代码吗?@TusharSharma,对不起。我编辑过。你是说数你调用
sleep()
的次数吗?如果是这样的话,只需使用一个计数器(当然,作为一个概括,你可以知道它将提前500次到达那里)。另一方面,如果你的意思是线程因任何原因被挂起多少次,那就不同了。@cbuchart,是的,我想知道线程因任何原因被挂起多少次。我认为下面的解决方案是正确的,不是吗?有其他办法解决这个问题吗?谢谢你的帮助!令人惊叹的。工作起来很有魅力。真的谢谢@塔沙尔哈马。这么简单,我无法理解。继续学习!再次感谢。@Cavalerio无问题,请勿对未引用的文本使用引用格式。对包含代码的文本使用代码格式。