java - 如何在 JAVA 中减慢线程速度

标签 java multithreading

我在这个类中运行了 10 次 for 循环。这个类实现了 Runnable 接口(interface)。现在在 main() 中我创建了 2 个线程。现在两者都将循环运行到 10。但我想检查每个线程的循环计数。如果 t1 超过 7,则让它 hibernate 1 秒,以便让 t2 完成。但是如何实现呢?请看代码。我试过了,但看起来很愚蠢。只是如何查看一个线程的数据???

class SimpleJob implements Runnable {
    int i;
    public void run(){
        for(i=0; i<10; i++){
            System.out.println(Thread.currentThread().getName()+" Running ");
        }        
    }

    public int getCount(){
        return i;
    }
}
public class Threadings {
    public static void main(String [] args){
        SimpleJob sj = new SimpleJob();
        Thread t1 = new Thread(sj);
        Thread t2 = new Thread(sj);

        t1.setName("T1");
        t2.setName("T2");

        t1.start();
        try{
            if(sj.getCount() > 8){ // I know this looks totally ridiculous, but then how to check variable i being incremented by each thread??
                System.out.println("Here");
                Thread.sleep(2000);
            }            
        }catch(Exception e){
            System.out.println(e);
        }
        t2.start();
    }    
}

请帮忙

最佳答案

你应该使用一些同步对象,而不是依赖于线程的减慢。我强烈建议您看一下 java.util.concurrent 包中的其中一个类。您可以为此使用 CountdownLatch - 线程 1 将等待它,线程 2 将执行倒计时并释放锁,并让线程 1 继续(释放应在线程 2 代码的末尾完成)。

关于java - 如何在 JAVA 中减慢线程速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11089401/

相关文章:

java - 无法在泛型类中调用实体的保存

java - 多线程——更快的方法?

c++ - Boost::Asio HTTP 服务器极慢

java - 错误 : Client does not support authentication protocol requested by server; consider upgrading MySQL client

java - HashMap + Lambda。如果为空,如何添加新值 <List>

java - Jacoco eclipse插件和SonarQube中的代码覆盖百分比值不同

c++ - 我的线程运行不正常,它给出了所有结果,最后不是一个一个地在一起,并且 GUI 在线程运行期间被挂起了吗?

.net - vb.net多线程无法正常工作

java - 循环中的 CompletableFuture : How to collect all responses and handle errors

java - 是什么导致我的 GWT 应用程序出现 HTTP 503 错误?