今天字节一面面试官让我用两个线程交替打印数字和字母,一个线程打印1到52的数字,一次打印两个;另一个线程打印a到z的字母,一次打印一个。
可以使用synchronized关键字和wait和notify方法去解决这个问题:
public class P2 {
static final Object object = new Object();
public static void main(String[] args) throws Exception{
new Thread(new Runnable() {
@Override
public void run() {
for(int i=1;i<=52;i=i+2){
synchronized (object){
object.notify();
try{
object.wait();
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.print(i+" ");
System.out.print(i+1+" ");
object.notify();
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
for(int i=0;i<=26;i++){
synchronized (object){
object.notify();
try{
object.wait();
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.print((char)(97+i)+" ");
object.notify();
}
}
}
}).start();
}
}