如何计算线程被暂停的次数

时间:2017-03-11 19:04:21

标签: java multithreading runnable

我在java中制作一个非常简单的程序,即使因为我是学生。我创建了一个计数为1000的程序,当该数字为2的多个时,该线程被暂停约500ms。没关系。但在决赛中,我需要显示线程被暂停的次数。像

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: ");
}

1 个答案:

答案 0 :(得分:1)

不要与(睡眠)混合(暂停):它们的工作方式不同。

Thread.sleep()将当前线程发送到&#34; Not  可运行&#34;状态一段时间。线程保持监视器  它已经获得 - 即如果该线程当前处于同步状态  块或方法没有其他线程可以进入此块或方法。如果  另一个线程调用t.interrupt()它会唤醒睡眠  线程。

t.suspend()已弃用。使用它可以停止a  当前线程以外的线程。悬挂的线程保留所有  监视器,因为这个状态不可中断,所以它是死锁  易发生。

stop(), suspend(), resume()是用于线程的方法  实现。 stop() - 终止线程执行,一次线程  停止后,无法使用start()方法重新启动,因为  stop()将终止线程的执行。相反,你可以暂停  使用sleep()方法执行线程。线程会  睡一段时间然后开始执行时  达到了时间限制。但是,如果线程需要,这并不理想  在某个事件发生时启动。在这种情况下,suspend()  方法允许线程暂时停止执行。 resume()方法  允许暂停的线程重新开始。

同步 - :如果您将任何方法声明为synchronized,则称其为同步方法&#39;。

synchronized方法用于锁定任何共享资源的对象。

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

尝试这样 - :

@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);

}