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

标签 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++) {
        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: ");
}

最佳答案

请勿将(暂停)与( sleep )混合:它们的工作方式不同。

Thread.sleep() 将当前线程发送到“Not “可运行”状态持续一段时间。线程保持监视器 它已经获取了——即如果线程当前处于同步状态 block 或方法没有其他线程可以进入此 block 或方法。如果 另一个线程调用t.interrupt()它将唤醒正在 sleep 的线程 线程。

t.suspend() 已弃用。使用它可以停止 当前线程以外的线程。挂起的线程保留其所有 监视器,并且由于该状态不可中断,因此是死锁 容易发生。

stop()、suspend()、resume()是线程使用的方法 执行。 stop() - 终止线程执行,一旦线程 停止后,无法使用 start() 方法重新启动,因为 stop() 将终止线程的执行。相反,你可以暂停 使用 sleep() 方法执行线程。该线程将 hibernate 一段时间,然后开始执行 已达到时间限制。但是,如果线程需要,这并不理想 当特定事件发生时启动。在这种情况下,挂起() 方法允许线程暂时停止执行。 resume() 方法 允许挂起的线程再次启动。

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

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

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

尝试这样-:

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

}

关于java - 如何计算线程被挂起的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42739350/

相关文章:

java - JUnit 测试类 (netbeans) 上没有可运行的方法

java - 尝试创建代理对象时出现 ClassCastException

java - 如何确保doLast甚至任务被跳过

java - 查找 `balanced number` 的算法 - 偶数和奇数除法器的数量相同

java - 从 Swings 组件中删除不必要的空格

java - 如何使用 Spring Boot 在 REST Web 服务中的 GET 请求期间修复 'HTTP-404' 错误

java - volatile 关键字有什么用?

递增/递减操作上的 C# 线程安全

java - Handler.postDelayed 对比 Runnable.run。可以调用 .run 而不是 .postDelayed 吗?

java - Java中线程间的通信无锁