/*
线程的加入(join)
如果有一个A执行绪正在运行,您希望插入一个B线程,并要求B线程先执行完毕,然后再继续A线程的流程,您可以使用 join()方法来完成这个需求,这就好比您手头上正有一个工作在进行,老板插入一个工作要求您先作好,然后再进行您原先正进行的工作。
当线程使用join()加入至另一个线程时,另一个线程会等待这个被加入的线程工作完毕,然后再继续它的动作
*/
public class ThreadOrder {
static int pre = 0;
static final int safe = 20;
public static void main(String[] args) {
pressure[] p1 = new pressure[3];
for (int i = 0; i < 3; i++) {
p1[i] = new pressure();
p1[i].start();
System.out.println(" p1 " + i + " " + pre);//主线程
}
try {
for (int i = 0; i < 3; i++) {
System.out.println(p1[i].getName());//主线程
p1[i].join();//没有加同步锁,线程将并行执行
System.out.println(" p2 " + i + " " + pre);//主线程
}
} catch (Exception e) {
}
System.out.println(pre);
}
}
class pressure extends Thread {
static synchronized void raise() {//同步按顺序执行
//void raise() {//没有同步并行执行,这时下面的结果将会有很大的改变
if (ThreadOrder.pre < ThreadOrder.safe - 15) {
try {
sleep(1000);
System.out.println(" p3 " + ThreadOrder.pre);
} catch (Exception e) {
}
ThreadOrder.pre += 15;
System.out.println(" p4 " + ThreadOrder.pre);
} else
;
}
public void run() {
raise();
}
}
/*执行结果:
p1 0 0
p1 1 0
p1 2 0
Thread-0 // 后面有等待并打印p3 0 和 p4 15,这个执行顺序是怎样的??
p3 0
p4 15
p2 0 15
Thread-1
p2 1 15
Thread-2
p2 2 15
15
*/
线程的加入(join)
如果有一个A执行绪正在运行,您希望插入一个B线程,并要求B线程先执行完毕,然后再继续A线程的流程,您可以使用 join()方法来完成这个需求,这就好比您手头上正有一个工作在进行,老板插入一个工作要求您先作好,然后再进行您原先正进行的工作。
当线程使用join()加入至另一个线程时,另一个线程会等待这个被加入的线程工作完毕,然后再继续它的动作
*/
public class ThreadOrder {
static int pre = 0;
static final int safe = 20;
public static void main(String[] args) {
pressure[] p1 = new pressure[3];
for (int i = 0; i < 3; i++) {
p1[i] = new pressure();
p1[i].start();
System.out.println(" p1 " + i + " " + pre);//主线程
}
try {
for (int i = 0; i < 3; i++) {
System.out.println(p1[i].getName());//主线程
p1[i].join();//没有加同步锁,线程将并行执行
System.out.println(" p2 " + i + " " + pre);//主线程
}
} catch (Exception e) {
}
System.out.println(pre);
}
}
class pressure extends Thread {
static synchronized void raise() {//同步按顺序执行
//void raise() {//没有同步并行执行,这时下面的结果将会有很大的改变
if (ThreadOrder.pre < ThreadOrder.safe - 15) {
try {
sleep(1000);
System.out.println(" p3 " + ThreadOrder.pre);
} catch (Exception e) {
}
ThreadOrder.pre += 15;
System.out.println(" p4 " + ThreadOrder.pre);
} else
;
}
public void run() {
raise();
}
}
/*执行结果:
p1 0 0
p1 1 0
p1 2 0
Thread-0 // 后面有等待并打印p3 0 和 p4 15,这个执行顺序是怎样的??
p3 0
p4 15
p2 0 15
Thread-1
p2 1 15
Thread-2
p2 2 15
15
*/