Java线程查询

pin*_*ing 2 java multithreading

我正在研究涉及线程的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();
}}
Run Code Online (Sandbox Code Playgroud)

现在从这段代码的输出中,我认为在任何时间点只有1个线程正在执行,并且执行似乎在线程之间交替.现在我想知道我对情况的理解是否正确.如果它是我想知道是否有任何方式我可以让两个线程同时执行,因为我希望将这种情况合并到我希望编写同时侦听2的tcp/ip套接字侦听器的情况港口,同时.而这种情况不能有任何停机时间.任何建议/意见都会有很大帮助.

干杯

Jon*_*eet 5

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

测试这个的最简单方法是让线程做一些真正的工作,并为它们计时.首先按顺序运行这两个任务,然后在两个不同的线程上并行运行它们.如果这两个任务根本不相互交互(包括像控制台这样的"隐藏"交互)那么你应该看到使用两个线程大约提高2倍的性能 - 如果你有两个核心或更多.

正如Thilo所说,无论如何,这可能与您的真实场景无关.即使是单线程系统仍然可以监听两个套接字,尽管每个套接字更容易让一个线程负责.在你正在收听套接字的大多数情况下,你会花费大量时间等待更多数据 - 在这种情况下,你是否拥有多个核心并不重要.

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