先看一下比较简单的,sleep() join()的用法。
package thread1;
public class TreadTest implements Runnable {
public static int a = 0;
public void run() {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(2000);
a += 1;
System.out.println("thread1" + i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
这个类很简单,跑起来以后每个循环延迟2000,注意一点就可以了,Thread.sleep这个方法的延迟,是对于当前线程的延迟,而不是所有线程都去睡了。
第二个是主类
package thread1;
/**
* @author Administrator
* join方法的测试
*/
public class Test {
public static void main(String[] args) {
TreadTest t = new TreadTest();
Thread th = new Thread(t);
th.start();
try {
th.join(20000); //运行TH线程20000毫秒后 执行下面
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//
//try {
// //th.join(0);
//} catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
//}
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(500);
System.out.println("main" + i);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(t.a);
}
}
大家可以运行起来看效果,底下的这个循环就是主线程,通过join这个方法进行对主线程和线程ThreadTest的先后执行,join不带任何参数时,说明要完全执行完当前线程后才允许其他线程运行,join(2000)代表先执行当前线程2000毫秒后允许其他线程。