Thread类的方法:
签名:public final void join()
作用:等待调用该方法的线程结束后才能执行,也就是调用该方法的进程会抢占CPU优先执行,执行完这个进程其他进程才能执行
package Threadproj;
class MyThread1 implements Runnable{
int i;
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"线程正在执行");
}
}
public class JoinDemo {
public static void main(String[] args) {
MyThread1 m = new MyThread1();
Thread p = new Thread(m);
p.start();
System.out.println("主线程运行结束");
}
}
package Threadproj;
class MyThread1 implements Runnable{
int i;
@Override
public void run() {
for (i = 1; i <= 3; i++)
System.out.println(Thread.currentThread().getName() + "线程正在执行第"+i+"次");
}
}
public class JoinDemo {
public static void main(String[] args) {
MyThread1 m = new MyThread1();
Thread p = new Thread(m);
p.start();
try {
p.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (int i = 1; i <= 3; i++)
System.out.println("主线程正在执行第"+i+"次");
System.out.println("主线程运行结束");
}
}
通过这两个方法我们可以清晰地看到join方法的作用!
带参数join
签名:public void join(long millis)
作用:等待该进程终止的最长时间为millis毫秒,也就是只给调用这个join方法的线程millis的时间,时间结束后无论这个线程是不是结束了都终止执行
package Threadproj;
class MyThread1 implements Runnable{
int i;
@Override
public void run() {
for (i = 1; i <= 300; i++)
System.out.println(Thread.currentThread().getName() + "线程正在执行第"+i+"次");
}
}
public class JoinDemo {
public static void main(String[] args) {
MyThread1 m = new MyThread1();
Thread p = new Thread(m);
p.start();
try {
p.join(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (int i = 1; i <= 3; i++)
System.out.println("主线程正在执行第"+i+"次");
System.out.println("主线程运行结束");
}
}
也就是执行millis时间后线程把CPU让出来