class mythread implements Runnable {
Thread t1;
String name = "";
public mythread(String thname) {
name = thname;
t1= new Thread(this, name);
System.out.println(t1);
t1.start();
System.out.println(t1.getName());
}
@Override
public void run() {
for (int i=5;i>0;i--){
try {
System.out.println(Thread.currentThread());
System.out.println("child Thread" + i);
Thread.sleep(2000);
} catch(InterruptedException e){
System.out.println("Child Thread Interrupted");
}
}
}
}
public class Mainthread {
public static void main(String[] args) {
mythread m1 = new mythread("Rohan");
mythread m2 = new mythread("Jain");
try {
for(int i=5;i>0;i--){
System.out.println("Main Thread" + i);
Thread.sleep(2000);
}
} catch(InterruptedException e){
System.out.println("Main Thread Interrupted");
}
}
}
输出结果为:
Thread[Rohan,5,main]
Rohan
Thread[Jain,5,main]
Thread[Rohan,5,main]
child Thread5
Jain
Main Thread5
Thread[Jain,5,main]
child Thread5
Main Thread4
Thread[Rohan,5,main]
child Thread4
Thread[Jain,5,main]
child Thread4
Main Thread3
Thread[Rohan,5,main]
child Thread3
Thread[Jain,5,main]
child Thread3
Main Thread2
Thread[Jain,5,main]
Thread[Rohan,5,main]
child Thread2
child Thread2
Thread[Rohan,5,main]
child Thread1
Thread[Jain,5,main]
child Thread1
Main Thread1
但我想要的输出就像首先它应该在线程“rohan”中打印5,然后在“jain”中打印5,然后在线程“main”中打印5,依此类推......请帮助.. !!!! !!
答案 0 :(得分:8)
这些问题让我很困惑。线程的全部意义在于它们并行运行异步,因此我们获得了更好的性能。由于硬件,竞争条件,时间切片随机性和其他因素,无法预测线程运行的顺序。任何询问线程程序中特定输出顺序的人都不应该使用线程。
以下是同一问题的类似答案:
答案 1 :(得分:2)
您可能希望在单个对象上使用锁来控制排序。有关详细信息,请参阅Java Thread Locks tutorial。
答案 2 :(得分:0)
给予线程处理器时间或在OS级别调度。因此,您的程序无法直接控制指令在其自己的线程上执行的时间。所以现在有了订单的保证。有一些特定于操作系统的变量可用于调度。
如果您想保证跨线程的顺序,而不是线程需要进行通信。有几种方法可以做到这一点。最常见的程序员使用互斥锁;这也称为锁。