Java线程示例?

标签 java multithreading

谁能给出一个以简单方式解释 Java 线程的示例程序?例如,假设我有三个线程 t1t2t3。我想要一个代码来演示线程同时执行,而不是顺序执行。

最佳答案

这是一个简单的例子:

ThreadTest.java

public class ThreadTest
{
   public static void main(String [] args)
   {
      MyThread t1 = new MyThread(0, 3, 300);
      MyThread t2 = new MyThread(1, 3, 300);
      MyThread t3 = new MyThread(2, 3, 300);

      t1.start();
      t2.start();
      t3.start();
   }
}

MyThread.java

public class MyThread extends Thread
{
   private int startIdx, nThreads, maxIdx;

   public MyThread(int s, int n, int m)
   {
      this.startIdx = s;
      this.nThreads = n;
      this.maxIdx = m;
   }

   @Override
   public void run()
   {
      for(int i = this.startIdx; i < this.maxIdx; i += this.nThreads)
      {
         System.out.println("[ID " + this.getId() + "] " + i);
      }
   }
}

还有一些输出:

[ID 9] 1
[ID 10] 2
[ID 8] 0
[ID 10] 5
[ID 9] 4
[ID 10] 8
[ID 8] 3
[ID 10] 11
[ID 10] 14
[ID 10] 17
[ID 10] 20
[ID 10] 23

解释 - 每个 MyThread 对象尝试打印从 0 到 300 的数字,但它们只负责该范围的某些区域。我选择按索引拆分它,每个线程都按线程总数向前跳跃。所以 t1 确实索引 0、3、6、9 等。

现在,在没有 IO 的情况下,像这样的琐碎计算仍然看起来就像线程在按顺序执行一样,这就是为什么我只展示了输出的第一部分。在我的电脑上,在这个 ID 为 10 的输出线程一次性完成后,接着是 9,然后是 8。如果你输入一个等待或一个 yield,你会看得更清楚:

MyThread.java

System.out.println("[ID " + this.getId() + "] " + i);
Thread.yield();

还有输出:

[ID 8] 0
[ID 9] 1
[ID 10] 2
[ID 8] 3
[ID 9] 4
[ID 8] 6
[ID 10] 5
[ID 9] 7

现在您可以看到每个线程正在执行、提前放弃控制以及下一次执行。

关于Java线程示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2531938/

相关文章:

java - 什么是在我的部署中设置 Cache-Control no-cache, no-store?

java - Spring Boot 关闭钩子(Hook)

ios - 识别并关闭非事件线程

node.js - NodeJS集群: how to reduce data from workers in master?

python - 如何使这个舍入函数更快?

c++ - 套接字调用在同时执行的两个或多个线程上提供重复的文件描述符(竞争条件)

java - 为什么在运行示例程序时出现找不到主要方法的错误?

java - 如何从 Java 中的另一个类获取变量?

java - 如何绘制位图的三角形部分

java - 如何匹配对 Netty 客户端请求的响应?