sleep方法会使当前的线程暂停执行一定时间(给其它线程运行机会)。读者可以运行示例1,看看结果就明白了。sleep方法会抛出异常,必须提供捕获代码。
实例一:
public class ThreadTest implements Runnable{
public void run(){
for(int k=0;k<5;k++){
if(k==2){
try{
Thread.currentThread().sleep(5000);
}
catch(Exception e){}
}
System.out.println(Thread.currentThread().getName()
+":"+k);
}
}
public static void main(String[] args){
Runnable r=new ThreadTest();
Threadt 1=new Thread(r,"t1_name");
Threadt 2=new Thread(r,"t2_name");
t1.setPriority(Thread.MAX_PRIORITY);
t2.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.start();
}
}
t1被设置了最高的优先级,t2被设置了最低的优先级。t1不执行完,t2就没有机会执行。但由于t1在执行的中途休息了5秒中,这使得t2就有机会执行了。
实例二:
public class ThreadTest implements Runnable{
public synchronized void run(){
for(int k=0;k<5;k++){
if(k==2){
try{
Thread.currentThread().sleep(5000);
}
catch(Exceptione){}
}
System.out.println(Thread.currentThread().getName()
+":"+k);
}
}
publicstaticvoidmain(String[]args){
Runnable r=new ThreadTest();
Threadt 1=new Thread(r,"t1_name");
Threadt 2=new Thread(r,"t2_name");
t1.start();
t2.start();
}
}
请读者首先运行示例程序,从运行结果上看:一个线程在sleep的时候,并不会释放这个对象的锁标志。
join()方法:
join()方法,它能够使调用该方法的线程在此之前执行完毕。
实例a
public class ThreadTest implements Runnable{
public static int a=0;
public void run(){
for(intk=0;k<5;k++){
a=a+1;
}
}
public static void main(String[] args){
Runnable r=new ThreadTest();
Thread t=new Thread(r);
t.start();
System.out.println(a);
}
}
运行结果不一定是5, 如果想让 输出的结果是5, 需要运用join,
把上面的代码改成如下:
public class ThreadTest implements Runnable{
public static int a=0;
public void run(){
for(intk=0;k<5;k++){
a=a+1;
}
}
public static void main(String[] args){
Runnable r=new ThreadTest();
Thread t=new Thread(r);
t.start();
t.join();
System.out.println(a);
}
}
测试一下以上的代码即可,答案为输出5.join()方法会抛出异常,应该提供捕获代码。或留给JDK捕获。