剛剛被面試完阿里實習的筆試題目。遇到的是一到多線程題目。
題目:創建兩個線程,一個線程輸出1,3,5,7.另一個線程輸出2,4,6,8.輸出到100爲止
我考後才想出來的一個寫法:
public class Main2
{
public static void main(String[] arg)
{
MyThread a = new MyThread(), b = new MyThread();
Lock lock=new Lock();
a.lock=lock;
b.lock=lock;
a.start();
b.start();
}
}
class Lock
{
int lock=1;
int id=0;
int current=0;
}
class MyThread extends Thread
{
Lock lock;
public void run()
{
while (true)
{
synchronized (lock)
{
if(lock.lock>100)
break;
lock.current=(int) this.getId();
if(lock.id==lock.current)//不是這個鎖
continue;
System.out.println(this.getId() + " " + lock.lock++);
lock.id=lock.current;
}
}
}
}
第一次面試。緊張的要死。死也想不出。考官提醒了一個用notify和wait的方法。可惜我沒用過。現在我花了1小時梳理了下情緒才用我學過的知識打了出來。額。可能不是最優的方法。但是肯定比睡眠100毫秒來的高效。