我正在处理涉及线程的Java应用程序。所以我只写了一段代码,以使自己熟悉多个并发线程的执行

public class thready implements Runnable{
private int num;

public thready(int a) {
    this.num=a;
}
public void run() {
  System.out.println("This is thread num"+num);
  for (int i=num;i<100;i++)
  {
      System.out.println(i);
  }
}
public static void main(String [] args)
{
    Runnable runnable =new thready(1);
    Runnable run= new thready(2);
    Thread t1=new Thread(runnable);
    Thread t2=new Thread(run);
    t1.start();
    t2.start();
}}

现在从此代码的输出中,我认为在任何时间点都只有一个线程正在执行,并且执行似乎在线程之间交替进行。现在,我想知道我对情况的理解是否正确。如果是这样,我想知道是否有任何一种方法可以让两个线程同时执行,因为我希望在要编写同时监听2的tcp/ip套接字监听器的情况下合并此方案。端口。而且这种情况下不能有任何停机时间。
任何建议/建议都会有很大的帮助。

干杯

最佳答案

您的计算机有多少个处理器?如果您有多个核心,则两个线程应同时运行。但是,控制台输出可能会被缓冲,并且需要在内部进行锁定-这很可能是您所看到的效果。

最简单的测试方法是让线程做一些实际的工作,并计时它们。首先依次运行两个任务,然后在两个不同的线程上并行运行它们。如果两个任务根本不交互(包括控制台之类的“隐藏”交互),那么使用两个线程(如果有两个或更多核心),您应该会看到大约2倍的性能提升。

正如Thilo所说,无论如何这可能与您的实际情况无关。即使是单线程系统,仍然可以在两个套接字上监听,尽管让一个线程负责每个套接字更容易。在大多数情况下,您在套接字上监听时,无论如何,您将花费大量时间等待更多数据-在这种情况下,是否有多个内核都无关紧要。

编辑:当您在具有单核的计算机上运行(并且假设没有超线程)时,一次只能执行一个线程,这在定义上几乎是这样。调度程序将确保两个线程都获得CPU时间,但是基本上它们必须轮流使用。

09-16 05:21