Java 线程示例?[已关闭]
2022-08-31 23:59:59
任何人都可以举一个示例程序,以简单的方式解释Java线程吗?例如,假设我有三个线程 ,和 。我想要一个代码来演示线程同时执行,而不是按顺序执行。t1
t2
t3
任何人都可以举一个示例程序,以简单的方式解释Java线程吗?例如,假设我有三个线程 ,和 。我想要一个代码来演示线程同时执行,而不是按顺序执行。t1
t2
t3
下面是一个简单的示例:
线程测试.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();
}
}
我的线程.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
解释 - 每个对象都尝试打印从 0 到 300 的数字,但它们只负责该范围的某些区域。我选择按索引拆分它,每个线程按线程总数跳转。索引 0、3、6、9 等也是如此。MyThread
t1
现在,如果没有 IO,像这样的琐碎计算仍然看起来像线程按顺序执行,这就是为什么我刚刚显示了输出的第一部分。在我的计算机上,此 ID 为 10 的输出线程一次完成所有操作后,然后是 9,然后是 8。如果你投入等待或收益率,你可以更好地看到它:
我的线程.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进程提供一个处理器来工作,那么您的java线程仍将以轮循机制方式为每个时间片进行调度。这意味着,没有两个会同时执行,但他们所做的工作将是交错的。您可以使用 Java 的 Visual VM(JDK 中的标准)等监视工具来观察 Java 进程中执行的线程。