线程的执行顺序

/*
线程的加入(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
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值