import java.io.*;
import java.lang.Math;class Job extends Thread{
private String jobName;
private int loopLmt;
public Job(int loopLmt,String jobName){
this.loopLmt=loopLmt;
this.jobName=jobName;
}
private void PAUSE(double sec){
try{
Thread.sleep(Math.round(1000.0*sec));
}
catch(InterruptedException ie){};
}
public void run(){
for(int i=1;i<=loopLmt;i++){
System.out.println(jobName+":work"+i);
PAUSE(Math.random());
}
}
}
public class Jobtest { public static void main(String[] args) {
Job job1=new Job(4,"job1");
Job job2=new Job(8,"job2");
job1.start();
job2.start();
System.out.println("job1 is alive: "+job1.isAlive()); //-----第一个打印
try{
job1.join();//------调用join
}
catch(InterruptedException ie){};
System.out.println("job1 is alive: "+job1.isAlive()); //-----第二个打印 }}运行结果:
job1:work1
job1 is alive: true
job2:work1
job2:work2
job1:work2
job2:work3
job1:work3
job2:work4
job1:work4
job2:work5
job1 is alive: false
job2:work6
job2:work7
job2:work8问题是:我想知道第一个打印和join什么时候调用,job1和job2调用start()之后不就是开始run起来吗?为什么会在run的时候执行下面的代码?
import java.lang.Math;class Job extends Thread{
private String jobName;
private int loopLmt;
public Job(int loopLmt,String jobName){
this.loopLmt=loopLmt;
this.jobName=jobName;
}
private void PAUSE(double sec){
try{
Thread.sleep(Math.round(1000.0*sec));
}
catch(InterruptedException ie){};
}
public void run(){
for(int i=1;i<=loopLmt;i++){
System.out.println(jobName+":work"+i);
PAUSE(Math.random());
}
}
}
public class Jobtest { public static void main(String[] args) {
Job job1=new Job(4,"job1");
Job job2=new Job(8,"job2");
job1.start();
job2.start();
System.out.println("job1 is alive: "+job1.isAlive()); //-----第一个打印
try{
job1.join();//------调用join
}
catch(InterruptedException ie){};
System.out.println("job1 is alive: "+job1.isAlive()); //-----第二个打印 }}运行结果:
job1:work1
job1 is alive: true
job2:work1
job2:work2
job1:work2
job2:work3
job1:work3
job2:work4
job1:work4
job2:work5
job1 is alive: false
job2:work6
job2:work7
job2:work8问题是:我想知道第一个打印和join什么时候调用,job1和job2调用start()之后不就是开始run起来吗?为什么会在run的时候执行下面的代码?
哦,我明白了 刚才查了下join的用法.......但是第一个打印是什么时候运行的?
第一个打印和job1.join()都是主线程在那时候跟另外两个线程竞争得到的时间片时执行的
job1.join()后主线程就趴窝了
等job1跑完,主线程重出江湖,跟job2竞争一起跑