刚刚被面试完阿里实习的笔试题目。遇到的是一到多线程题目。
题目:创建两个线程,一个线程输出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毫秒来的高效。