一道淘宝笔试题

本文探讨了Java中多线程的同步问题,通过使用synchronized关键字和notify/wait方法实现线程间的同步控制,确保了特定顺序的输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大致如下:
	
public class ThreadTest {
public static void main(String[] args) {
System.out.println("start");
new Thread(new Runnable(){
public void run(){
System.out.println("step2");
}
}).start();
System.out.println("step1");
new Thread(new Runnable(){
public void run() {
System.out.println("step3");
}
}).start();
System.out.println("end");
}
}


问:
1.输出是什么样的,为什么?
2.若要按start step1 step2 step3 end的顺序输出,应该如何修改

第一问不多说了
第二话答的时候只是狂扯了一通多线程的锁机制,具体实现没考虑,回来翻了下synchronized和notify、wait之类的用法之后,补充了一下修改的代码,如下:

public class ThreadTest {

public static void main(String[] args) throws InterruptedException {

final Object lock = new Object();
synchronized(lock){
System.out.println("start");
new Thread(new Runnable(){
public void run(){
synchronized(lock){
System.out.println("step2");
lock.notify();
}
}
}).start();
System.out.println("step1");
lock.wait();
new Thread(new Runnable(){
public void run() {
synchronized(lock){
System.out.println("step3");
lock.notify();
}
}
}).start();
lock.wait();
System.out.println("end");
}
}

}


代码质量比较水,还望轻拍。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值