繁体   English   中英

Java-如何在线程之间分配处理时间?

[英]Java - How is processing time split between threads?

我是Java线程技术的新手。 我一直在阅读一些在线教程,但是没有找到很多有关如何在线程之间分配处理时间的材料。

我创建了一个Runnable类:

public class HelloThread implements Runnable {

    public void run() {

        int i = 0; 
        while(true) 
        { 
            System.out.println("New Thread" + i);
            i++; 
        }
    }
}

然后在以下位置启动新线程:

public static void main (String[] args) { 

    // Start a new thread
    Thread helloThread = new Thread(new HelloThread());
    helloThread.start(); 

    int i = 0; 
    while(true) 
    { 
        System.out.println("hello from main thread" + i);   
        i++; 
    } 
}

输出在helloThread和主线程中的消息之间交替。 这两个线程之间的处理时间如何分配? 我使用了setPriority()方法,但是即使将helloThread的优先级设置为10,主线程仍然会占用一些处理时间。

谢谢!

您无法预测线程何时运行(如您所假设的)。 即使您的线程优先级为10,也无法保证线程将完全运行。 线程依赖于具体的JVM(有不同的JVM实现)以及底层操作系统甚至您的硬件(例如您拥有多少个内核)。

在您的示例中,您有两个线程(主线程和HelloThread )。 两者都在运行。 因此,两个线程都运行并打印消息是完全可以的。 线程的目的是交替调度并并行运行。

这是因为它们具有相同的优先级。 您可以添加如下语句

System.out.println( Thread.currentThread().getPriority() );

根据您的示例,两个线程的优先级均应为5

正如Thomas Uhrig解释的那样,即使具有更高的优先级,另一个线程仍将得到调度和执行。 这是不确定的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM