练习多线程java示例,这里我在A类中创建线程A,在B类中创建线程B.现在通过创建对象来启动这两个线程。我在放置代码
package com.sri.thread;
class A extends Thread
{
public void run()
{
System.out.println("Thread A");
for(int i=1;i<=5;i++)
{
System.out.println("From thread A i = " + i);
}
System.out.println("Exit from A");
}
}
class B extends Thread
{
public void run()
{
System.out.println("Thread B");
for(int i=1;i<=5;i++)
{
System.out.println("From thread B i = " + i);
}
System.out.println("Exit from B");
}
}
public class Thread_Class
{
public static void main(String[] args)
{
new A().start(); //creating A class thread object and calling run method
new B().start(); //creating B class thread object and calling run method
System.out.println("End of main thread");
}
//- See more at: http://www.java2all.com/1/1/17/95/Technology/CORE-JAVA/Multithreading/Creating-Thread#sthash.mKjq1tCb.dpuf
}
我不明白执行的流程,通过调试尝试但没有得到它。执行的流程是。在这里我放置了令我困惑的输出。
Thread A
Thread B
End of main thread
From thread B i = 1
From thread B i = 2
From thread B i = 3
From thread B i = 4
From thread B i = 5
Exit from B
From thread A i = 1
From thread A i = 2
From thread A i = 3
From thread A i = 4
From thread A i = 5
Exit from A
为什么线程B中的循环在进入线程A的循环之前完成?
答案 0 :(得分:5)
除非您有多个处理器,否则线程将以时间片为基础共享处理器。执行其中一个线程的总时间可能小于时间片,因此首先调度的线程将在另一个线程完全运行之前完成。
尝试在run方法中添加一个简短的Thread.sleep调用。
答案 1 :(得分:4)
执行多个线程时确实没有保证执行顺序。线程彼此独立。
源代码中的链接解释了它:
在这里你可以看到,虽然我们的程序,两个输出都不同 代码是一样的。它发生在线程程序中,因为它们正在运行 同时靠自己。线程独立运行 另一个,只要有机会就会执行。
答案 2 :(得分:1)
线程正在同时执行。一个不在另一个内部执行。每个线程获得CPU时间,做一些工作,然后等待CPU忙于其他事情。根据计算机上发生的其他情况,它每次都可能以不同的方式运行。
如果您希望线程的输出消息是隔行扫描的,那么在某种程度上,如果您将循环增加到数千次迭代,它们将是一个。现在,代码完成得非常快,很难看出它们真正并行运行。