兩個執行緒交替列印,就是要兩個執行緒之間進行同步,走走停停。執行緒的同步可以使用object類自帶的wait和notify(或者notifyall)方法實現。
synchronized(lock)
//通知其他執行緒執行
lock.notify();
//先等待
try catch (interruptedexception e)
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 == 2)
//第一次有兩種選擇,然後根據不同的選擇,然後開始不同的下一步,但是下一步還是一樣有兩種選擇
return jumpfloor(target - 1) + jumpfloor(target - 2);
}下面是方法二,主要還是有規律,實際這樣的寫法沒意義
public int jumpfloor2(int target)
if(target == 2)
for(int i = 3; i <= target; i ++)
return y;
}
c 多執行緒和一些工具
c 多線的資料教程很多,就不自己寫了了,放一點自己看到不錯的鏈結。std unique lock與std lock guard unique lock與lock guard 多執行緒條件變數std condition variable 條件變數1 條件變數2 shared lock shared m...
一些多執行緒的筆記
1.保護方法原子性的同時,也要注意保護方法中使用到的變數。下面這段 是否一定安全?public class counter public synchronized void add1 other method 不一定,如果在other method中也處理counter但是又沒有保護的情況下,會出現...
windows和linux下多執行緒的一些區別
我認為linux的多執行緒不如windows。理由如下 一 功能 waitforsingleobject在linux下可以用pthread cond wait來替代實現,但是pthread cond wait不能用來等待thread handle。要等待thread handle可以用pthread...