java兩個線程輪流輸出奇數和偶數到100

剛剛被面試完阿里實習的筆試題目。遇到的是一到多線程題目。

題目:創建兩個線程,一個線程輸出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毫秒來的高效。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章