怎么在java main方法里用一个线程的sleep()方法让一个循环执行一次后阻塞一秒再循环下一次

如题:怎么在main方法里用一个线程的sleep()方法让一个循环执行一次后阻塞一秒再循环下一次
请写一个例子出来,感激不尽
谢谢,这个我会了,但是在阻塞这一秒的时候程序却执行了其他的代码,请问我要如何做到程序在阻塞的这一秒时间内,程序不会执行其他代码呢。提示:当前程序中只有两个线程,一个线程是阻塞500毫秒,一个线程是1000毫秒。要求如下:
首先,我要保证500毫秒的线程优先执行,
其次,再执行1000毫秒的线程。
最后,当这两个线程都执行完毕后,再执行其他代码。

package com.tarena.fly;

public class asdfsd {

public static void main(String[] args) {
final Thread t1 = new Thread(){
public void run(){
int i = 0;
while(i<10){
System.out.println("t1:"+i++);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};

final Thread t2 = new Thread(){
public void run(){
int i = 0;
try {
t1.join();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
while(i<10){
System.out.println("t2:"+i++);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};

Thread t3 = new Thread(){
public void run(){
int i = 0;
try {
t1.join();
t2.join();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
while(i<10){
System.out.println("t3:"+i++);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};

Thread t4 = new Thread(){
public void run(){
int i = 0;
try {
t1.join();
t2.join();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
while(i<10){
System.out.println("t4:"+i++);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};

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

}
}

t3,t4都格式都一样,我就不排了。
join方法,等待其他线程结束之后再执行,你在T2里加上t1.join,就是等待t1执行完,在执行自己的run方法,然后再其他线程里加上t1.join;t2.join 就OK了;

亲测,给分!追问

亲,有点麻烦,麻烦优化行么

追答

是哪里麻烦了...
你直接粘到java里,把包名类名改一下,运行就知道了。

运行结果:
t1:0
t1:1
t1:2
t1:3
t1:4
t1:5
t1:6
t1:7
t1:8
t1:9
t2:0
t2:1
t2:2
t2:3
t2:4
t2:5
t2:6
t2:7
t2:8
t2:9
t4:0
t3:0
t4:1
t3:1
t4:2
t3:2
t4:3
t3:3
t4:4
t3:4
t4:5
t3:5
t4:6
t3:6
t4:7
t3:7
t4:8
t3:8
t4:9
t3:9

这些线程都是异步运行的,所以一开始都会运行的,没有顺序
但是当,t2,t3,t4运行到t1.join的时候,线程就会产生阻塞,让t1运行,直到t1运行结束。
t2也是一样。
具体的join方法你可以看达内TTS多线程这一块的讲解。
http://pdf7.tarena.com.cn/tts8_source/ttsPage/JAVA/JSD_V04/JAVASE02/DAY04/SUPERDOC/01/index.html

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-07-19
new Thread(){
public void run(){
while(true) {
try{
//你要做的事情,1000是每一秒循环一次
Thread.sleep(1000);
} catch (Exception e) {
}
}
}
}.start();追问

谢谢,这个我会了,但是在阻塞这一秒的时候程序却执行了其他的代码,请问我要如何做到程序在阻塞的这一秒时间内,程序不会执行其他代码呢。提示:当前程序中只有两个线程,一个线程是阻塞500毫秒,一个线程是1000毫秒。要求如下:
首先,我要保证500毫秒的线程优先执行,
其次,再执行1000毫秒的线程。
最后,当这两个线程都执行完毕后,再执行其他代码。

第2个回答  2015-07-21
别开两个线程 就开一个就符合你的要求了追问

可以写个例子么?