怎么让以下代码是按顺序输出的?
public class Main3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyThread(1).start();
new MyThread(2).start();
new MyThread(3).start();
new MyThread(4).start();
new MyThread(5).start();
new MyThread(6).start();
new MyThread(7).start();
}
}
class MyThread extends Thread {
private int i = 0;
public MyThread(int i){
this.i = i;
}
@Override
public void run() {
System.out.println(i);
}
}
用join()函数?
MyThread my = new MyThread(1)
my.start();
my.join() ;
for(int i=1;i<7;i++){
new MyThread(i).start();
}
利用循环不可以嘛
线程合并 但是你这个例子太快了 看不出来
public class Main3 {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
new MyThread(1).start();
new MyThread(1).sleep(100);
new MyThread(2).start();
new MyThread(2).sleep(100);
new MyThread(3).start();
new MyThread(3).sleep(100);
new MyThread(4).start();
new MyThread(4).sleep(100);
new MyThread(5).start();
new MyThread(5).sleep(100);
new MyThread(6).start();
new MyThread(6).sleep(100);
new MyThread(7).start();
new MyThread(7).sleep(100);
}
}
class MyThread extends Thread {
private int i = 0;
public MyThread(int i){
this.i = i;
}
@Override
public synchronized void run() {
System.out.println(i);
}
}
public class Main3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread t1 = new MyThread(1);
Thread t2 = new MyThread(2);
Thread t3 = new MyThread(3);
Thread t4 = new MyThread(4);
Thread t5 = new MyThread(5);
Thread t6 = new MyThread(6);
Thread t7 = new MyThread(7);
t1.start();
t1.join();
t2.start();
t2.join();
t3.start();
t3.join();
t4.start();
t4.join();
t5.start();
t5.join();
t6.start();
t6.join();
t7.start();
t7.join();
}
}
class MyThread extends Thread {
private int i = 0;
public MyThread(int i){
this.i = i;
}
@Override
public void run() {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(i);
}
}
楼上正解~用sleep和join
为什么使用多线程还要保证执行顺序呢?多线程在运行的时候有专门的机制来分配时间戳,所以楼上那些让线程sleep的方法不一定能保证顺序,因为在
分配的时间里,一个线程可能没执行完,但是时间到了依然要释放cpu资源。如果非要按照你说的顺序来执行,有一个办法是肯定可行的,那就是锁,让
后一个线程等待前一个线程的资源锁。以上仅代表个人观点。