簡單的一些算法和多線程開發

兩個線程交替打印,就是要兩個線程之間進行同步,走走停停。線程的同步可以使用Object類自帶的wait和notify(或者notifyAll)方法實現。
synchronized(lock)
//通知其他線程運行
lock.notify();
//先等待
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}

Condition接口也提供了類似Object的監視器方法,與Lock配合可以實現等待/通知模式
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();

// thread 1
lock.lock();
condition.await();
doSomething();
lock.unlock();

// thread 2
lock.lock();
doSomething();
condition.signal();
lock.unlock();

void signal():喚醒一個等待在condition上的線程,將該線程從等待隊列中轉移到同步隊列中,如果在同步隊列中能夠競爭到Lock則可以從等待方法中返回。

Condition能夠支持不響應中斷,而通過使用Object方式不支持;
Condition能夠支持多個等待隊列(new 多個Condition對象),而Object方式只能支持一個;
Condition能夠支持超時時間的設置,而Object不支持

斐波那契數列,青蛙跳格
public static int JumpFloor(int target) {
if(target == 1){
return 1;
}
if(target == 2){
return 2;
}
//第一次有兩種選擇,然後根據不同的選擇,然後開始不同的下一步,但是下一步還是一樣有兩種選擇
return JumpFloor(target - 1) + JumpFloor(target - 2);
}
下面是方法二,主要還是有規律,實際這樣的寫法沒意義
public int JumpFloor2(int target) {
int x=1, y=2, z;
if(target == 1){
return 1;
}
if(target == 2){
return 2;
}
for(int i = 3; i <= target; i ++){
z = y;
y = x + y;
x = z;
}
return y;

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