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

如题:怎么在main方法里用一个线程的sleep()方法让一个循环执行一次后阻塞一秒再循环下一次请写一个例子出来,感激不尽谢谢,这个我会了,但是在阻塞这一秒的时候程序却执... 如题:怎么在main方法里用一个线程的sleep()方法让一个循环执行一次后阻塞一秒再循环下一次
请写一个例子出来,感激不尽
谢谢,这个我会了,但是在阻塞这一秒的时候程序却执行了其他的代码,请问我要如何做到程序在阻塞的这一秒时间内,程序不会执行其他代码呢。提示:当前程序中只有两个线程,一个线程是阻塞500毫秒,一个线程是1000毫秒。要求如下:
首先,我要保证500毫秒的线程优先执行,
其次,再执行1000毫秒的线程。
最后,当这两个线程都执行完毕后,再执行其他代码。
展开
 我来答
a54545400
推荐于2017-09-12
知道答主
回答量:8
采纳率:0%
帮助的人:7.3万
展开全部
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
Crazy楚白
2015-07-19
知道答主
回答量:2
采纳率:0%
帮助的人:2379
展开全部
new Thread(){
public void run(){
while(true) {
try{
//你要做的事情,1000是每一秒循环一次
Thread.sleep(1000);
} catch (Exception e) {
}
}
}
}.start();
追问
谢谢,这个我会了,但是在阻塞这一秒的时候程序却执行了其他的代码,请问我要如何做到程序在阻塞的这一秒时间内,程序不会执行其他代码呢。提示:当前程序中只有两个线程,一个线程是阻塞500毫秒,一个线程是1000毫秒。要求如下:
首先,我要保证500毫秒的线程优先执行,
其次,再执行1000毫秒的线程。
最后,当这两个线程都执行完毕后,再执行其他代码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
文文佗
2015-07-21
知道答主
回答量:2
采纳率:0%
帮助的人:1312
展开全部
别开两个线程 就开一个就符合你的要求了
追问
可以写个例子么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式