#
基本的ThreadLocal使用
public class ThreadLocalTest {
static ThreadLocal tl=new ThreadLocal();
public static void main(String[] args) {
for(int i=0;i<2;i++){
new Thread(new Runnable(){
int data =new Random().nextInt();
public void run() {
System.out.println(Thread.currentThread().getName()+"存入的數(shù)據(jù)是 "+data);
tl.set(data); //存到了當(dāng)前線程
new A().getThreadData();
}
}).start();
}
}
static class A{ //靜態(tài)類相當(dāng)于一個(gè)外部類
public void getThreadData(){
System.out.println("data is "+tl.get());
}
}
}
結(jié)果可能是
Thread-0存入的數(shù)據(jù)是 1997234255
Thread-1存入的數(shù)據(jù)是 267171693
data is 1997234255
data is 267171693
通過(guò)包裝對(duì)象非常爛的使用方式
class MyThreadScopeData{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class ThreadLocalTest {
static ThreadLocal<MyThreadScopeData> myThreadScopeData=
new ThreadLocal<MyThreadScopeData>();
public static void main(String[] args) {
for(int i=0;i<2;i++){
new Thread(new Runnable(){
int data =new Random().nextInt();
public void run() {
MyThreadScopeData mydata=new MyThreadScopeData();
mydata.setName("name is name"+data);
mydata.setAge(data);
//把對(duì)象存入ThreadLocal 這樣的做法非常爛!!!!!
myThreadScopeData.set(mydata);
new B().showThreadScopeData();
}
}).start();
}
}
static class B{
public void showThreadScopeData(){
System.out.println(myThreadScopeData.get().getName());
System.out.println("age is "+myThreadScopeData.get().getAge());
}
}
}
}
標(biāo)準(zhǔn)使用方式
/**
* 單列線程
* 在線程中范圍內(nèi)任意地方調(diào),得到都是同一個(gè)實(shí)例對(duì)象
* 把ThreadLocal封裝到單列的內(nèi)部
*/
class ThreadSingle{
private ThreadSingle(){}
public static ThreadLocal<ThreadSingle> map=new ThreadLocal<ThreadSingle>();
//不需要加synchronized,即便有第2個(gè)線程進(jìn)入,但拿到的map.get()是獨(dú)有的。
public static ThreadSingle getThreadInstance(){ //方法得到是與本線程相關(guān)的實(shí)例
ThreadSingle obj=map.get();
/**
* 如果A進(jìn)入時(shí)obj=null,剛創(chuàng)建完還沒(méi)賦值,此時(shí)B線程進(jìn)入,但B和A沒(méi)有關(guān)系。
*/
if(obj==null){
obj=new ThreadSingle();
map.set(obj);
}
return obj;
}
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class ThreadLocalTest {
public static void main(String[] args) {
for(int i=0;i<2;i++){
new Thread(new Runnable(){
int data =new Random().nextInt();
public void run() {
ThreadSingle.getThreadInstance().setName("name"+data);
ThreadSingle.getThreadInstance().setAge(data);
new C().showData();
}
}).start();
}
}
在軟件開(kāi)發(fā)過(guò)程中,你經(jīng)歷的每件事情都會(huì)潛移默化地影響著你。隨著時(shí)間的流逝,年紀(jì)的增長(zhǎng),對(duì)于程序開(kāi)發(fā)技術(shù)(相同/或者相關(guān)能力)以及自身的理解也會(huì)不斷沉淀,這些最終也會(huì)幫助你達(dá)成目標(biāo)——成為一名優(yōu)秀的程序員。這里談到的經(jīng)歷不僅限于程序員生涯里的里程碑,比如換工作、成為領(lǐng)導(dǎo)/經(jīng)理或者自己創(chuàng)業(yè)。你所經(jīng)歷的每一份工作、每個(gè)項(xiàng)目(不論大小)、與團(tuán)隊(duì)成員的每次交流、甚至你實(shí)現(xiàn)的每一個(gè)程序模塊,都會(huì)讓你變得比以前更優(yōu)秀、更有活力、更有見(jiàn)地。
在日常的工作當(dāng)中不放過(guò)任何一點(diǎn)可以學(xué)習(xí)的新知識(shí),會(huì)讓你成為更加出色的程序員。我說(shuō)的是重要的經(jīng)驗(yàn)——你不必去關(guān)心瑣碎的事情(比如每一次敲擊鍵盤是否完美),重要的是把握好每一天的安排。如果你出去旅游歸來(lái)發(fā)現(xiàn)兩手空空毫無(wú)收獲,你肯定認(rèn)為這是在浪費(fèi)時(shí)間。對(duì)于程序員生涯也是如此。如果你在完成一個(gè)項(xiàng)目或者實(shí)現(xiàn)了一個(gè)程序功能之后自己沒(méi)有收獲(比如,對(duì)軟件開(kāi)發(fā)的理解沒(méi)有提高并且也沒(méi)有學(xué)到什么新的技術(shù)),這同樣也是一種浪費(fèi)。
你可能會(huì)說(shuō),有些必須完成的工作對(duì)你而言是無(wú)聊的重復(fù)勞動(dòng),從中學(xué)不到任何東西。事實(shí)可能的確如此,但是這取決于你如何看待它。歸根結(jié)底你需要自己創(chuàng)造成長(zhǎng)的條件,在做事的時(shí)候需要保持創(chuàng)新。
從每一次的經(jīng)歷中汲取營(yíng)養(yǎng)
首先,除了學(xué)習(xí)新的編程語(yǔ)言,掌握你鐘愛(ài)的開(kāi)發(fā)平臺(tái)最新特性,你還需要提高自己的溝通技巧。其次,學(xué)習(xí)如何與別人一起工作,提高自己團(tuán)隊(duì)協(xié)作能力也很重要。接著,你還需要掌握領(lǐng)導(dǎo)能力、管理能力、如何自我激勵(lì)、財(cái)務(wù)知識(shí)、行業(yè)專業(yè)知識(shí)、營(yíng)銷知識(shí)和組織知識(shí)。除此之外對(duì)所從事行業(yè)相關(guān)的內(nèi)容最好也要有廣泛的認(rèn)識(shí)和理解。在學(xué)習(xí)的過(guò)程中不斷將自己推向極限,最終你會(huì)不斷提升成為優(yōu)秀的程序員。
我想說(shuō)的是,無(wú)論你做什么,都可以從上面列舉的這些方面來(lái)對(duì)照自己,看哪些方面可以有所提高。有的時(shí)候你的機(jī)遇很好,接觸的是最新的技術(shù),采用的是對(duì)你而言嶄新的開(kāi)發(fā)流程,這時(shí)你不由自主地就開(kāi)始學(xué)習(xí)和吸收新知識(shí)。而有的時(shí)候工作確實(shí)很乏味,如果你不會(huì)自己創(chuàng)造條件自我提升(從上面列舉的方面找到可以提高的地方),你就只能做著機(jī)械勞動(dòng)白白浪費(fèi)了一次提高自己的好機(jī)會(huì),以及自己寶貴的時(shí)間。
下面我通過(guò)一個(gè)例子來(lái)說(shuō)明如何從平凡的工作中提高自己。比如說(shuō)你是一個(gè)SQL大牛,有一項(xiàng)工作需要完成很多SQL,只有你是最佳人選。你很精于此道,表面上這項(xiàng)工作很枯燥而且你也不能從中學(xué)到什么。但是如果進(jìn)一步來(lái)看,也許這項(xiàng)任務(wù)需要與別人配合完成,而你可能并不十分擅長(zhǎng)與別人搭檔或者溝通,這就是你提高自己的絕佳機(jī)會(huì),你要做的就是發(fā)現(xiàn)這個(gè)機(jī)會(huì)。或者也許你也十分擅長(zhǎng)與別人搭檔工作,但是假如這次你的搭檔可能連新手都算不上,這就是你提高培訓(xùn)技巧的絕佳機(jī)會(huì),捎帶地也讓這位新人快速成長(zhǎng)。
也許這些都沒(méi)有發(fā)生,你在做著一件你閉著眼睛都可以完成的工作,為什么不嘗試去更深入地了解和提高你使用的技術(shù)呢?也許你也可以就此機(jī)會(huì)提高一下你的打字技巧,這肯定沒(méi)有什么壞處。如果你實(shí)在不想做這件無(wú)聊的工作,可以嘗試和老板溝通一下把事情推掉,雖然這不在我們上面的討論范圍之內(nèi),你也可以嘗試一下。也許溝通不能達(dá)到目的,但是你可以從嘗試溝通當(dāng)中鍛煉一下自己的機(jī)智和勇氣(如何在尷尬的情形下保持鎮(zhèn)定),畢竟你不會(huì)為了推掉任務(wù)而去惹惱你的經(jīng)理/領(lǐng)導(dǎo):)。所以,如果你能從不同的角度看待一個(gè)任務(wù),突然之間你會(huì)發(fā)現(xiàn)在成為優(yōu)秀程序員的路上又邁進(jìn)了一步。
如果你在原地踏步該怎么辦?
有的時(shí)候你一直無(wú)法擺脫一些事情(似乎這些事情本來(lái)就是如此)。即使從各個(gè)角度看也無(wú)法從中找到一點(diǎn)可以提高的地方,這個(gè)時(shí)候你該怎們辦?這個(gè)問(wèn)題問(wèn)的很好,但你應(yīng)該問(wèn)的不是這個(gè)問(wèn)題。如果你真的覺(jué)得不能從工作中學(xué)習(xí)和成長(zhǎng),為什么你還在做這樣的工作呢(這個(gè)才是你應(yīng)該問(wèn)的)?如果是因?yàn)榻?jīng)濟(jì)的原因(比如你現(xiàn)在的收入很高),那么一定要確保不會(huì)為了短期利益而損害了未來(lái)的前途。如果是因?yàn)槟闵岵坏脠F(tuán)隊(duì)里一起工作的同事,那么只要分析一下利弊就會(huì)知道,即使你不在這里工作了,你們依然還是好朋友。你只是離開(kāi)了公司,但你們的友誼沒(méi)有結(jié)束。
如果不是上述的原因,那你為什么還在做這樣的工作呢?你應(yīng)該意識(shí)到,你會(huì)因此喪失寶貴的機(jī)會(huì)。請(qǐng)記住,對(duì)你所做的每一件事情給出評(píng)價(jià),看它是否能給你帶來(lái)改變或者加深你對(duì)程序開(kāi)發(fā)技術(shù)的理解。如果答案是否定的,你可以馬上離開(kāi);如果答案是肯定的,那么(做這件事的時(shí)候)你不但能夠從中獲得滿足感,而且每一天(而不僅僅是每一年)都會(huì)在技術(shù)和人格上朝著完美的境界邁進(jìn)
程序員是一個(gè)比較特殊的群體,他們因?yàn)殚L(zhǎng)期和電腦打交道所養(yǎng)成的性格和脾氣也是比較相近的。當(dāng)然,既然是人,當(dāng)然是會(huì)有性格的,也是會(huì)有脾氣的。下面,讓我來(lái)看看10種能把程序惹毛了的事情。一方面我們可以看看程序員的共性,另一方面我們也可以看看程序員的缺點(diǎn)。無(wú)論怎么樣,我都希望他們對(duì)你的日常工作都是一種幫助。
第十位 程序注釋
程序注釋本來(lái)是一些比較好的習(xí)慣,當(dāng)程序員老手帶新手的時(shí)候,總是會(huì)告訴新手,一定要寫程序注釋。于是,新手們當(dāng)然會(huì)聽(tīng)從老手的吩咐。只不過(guò),他們可能對(duì)程序注釋有些誤解,于是,我們經(jīng)常在程序中看到一些如下的注釋:
代碼:
r = n/2; //r是n的一半
//循環(huán),僅當(dāng)r- n/r不大于t
while ((r-n/r) <=t){
r =0.5* (r-n/r); // 設(shè)置r變量
}
每當(dāng)看到這樣的注釋只注釋是什么,而不注釋為什么,相信你一定會(huì)被惹火,這是誰(shuí)寫的程序注釋啊?不找來(lái)罵一頓看來(lái)是不會(huì)解氣了。程序注釋應(yīng)該是告訴別人你的意圖和想法,而不是告訴別人程序的語(yǔ)法,這是為了程序的易讀性和可維護(hù)性,這樣的為了注釋而注釋的注釋,分明不是在注釋,而是在挑釁,惹毛別人當(dāng)然毋庸置疑。
第九位 打斷
正當(dāng)程序沉浸于編程算法的思考,或是靈感突現(xiàn)正在書(shū)寫程序的時(shí)候,但卻遭到別人的打斷,那是一件非常痛苦的事情,如果被持續(xù)打斷,那可能會(huì)讓人一下子就煩躁起來(lái)。打斷別人的人在這種情況下是非常不禮貌的。被打斷的人就像函數(shù)調(diào)用一下,當(dāng)其返回時(shí),需要重新恢復(fù)斷點(diǎn)時(shí)的現(xiàn)場(chǎng),當(dāng)然,人不是電腦,恢復(fù)現(xiàn)場(chǎng)通常是一個(gè)很痛苦的過(guò)程,極端的情況下可能需要從頭開(kāi)始尋找思緒,然后一點(diǎn)一點(diǎn)地回到斷點(diǎn)。
因此,我看到一些程序員在需要安靜不被打擾的時(shí)候,要么會(huì)選擇去一個(gè)沒(méi)人找得到的地方,要么會(huì)在自己的桌子上方高掛一個(gè)條幅以示眾人本人正執(zhí)行內(nèi)核程序,無(wú)法中斷,請(qǐng)勿騷擾,謝謝!可見(jiàn)正在沉浸于工作的程序被打斷是多么大的開(kāi)銷。自然,被打斷所惹毛了的人也不在少數(shù)了。
第八位 需求變化
這個(gè)事情估計(jì)不用多說(shuō)了。只要是程序員,面對(duì)需求變化的時(shí)候可能總是很無(wú)奈的。一次兩次可能還能接受,但也頂不住經(jīng)常變啊。據(jù)說(shuō)敏捷開(kāi)發(fā)中有一套方法論可以讓程序員們享受需求的變化,不知道是真是假。不過(guò),今天讓你做一個(gè)書(shū)桌,明天讓你把書(shū)桌改成餐桌,后天讓你把餐桌改成雙人床,大后天讓你把床改成小木屋,然后把小木屋再改成高樓大廈。哎,是人都會(huì)被惹毛了的。那些人只用30分鐘的會(huì)議就可以作出任何決定,但后面那幾十個(gè)程序員需要搭上幾百個(gè)小時(shí)的辛苦工作。如果是我,可能我也需要神獸草泥馬幫助解解氣了。
不過(guò),這也正說(shuō)明了,程序員并不懂得怎么和用戶溝通,而用戶也不懂得和程序員溝通,如果一個(gè)項(xiàng)目沒(méi)有一個(gè)中間人(如:PM)在其中協(xié)調(diào)的話,那么整個(gè)項(xiàng)目可能就是雞同鴨講,用戶和程序員都會(huì)被對(duì)方所惹毛了。如果要例舉幾個(gè)用戶被惹毛的事情,估計(jì)程序員的那種一根筋的只從技術(shù)實(shí)現(xiàn)上思考問(wèn)題的方法應(yīng)該也能排進(jìn)前5名。
第七位 經(jīng)理不懂技術(shù)
外行領(lǐng)導(dǎo)內(nèi)行的事例還少嗎?領(lǐng)導(dǎo)一句話,無(wú)論對(duì)不對(duì),都是對(duì)的,我們必需照做,那怕是多么愚蠢多么錯(cuò)誤的決定,我們也得照做。程序員其實(shí)并不怕經(jīng)理不懂技術(shù),最怕的就是不懂技術(shù)的經(jīng)理裝著很懂技術(shù)。最可氣的是,當(dāng)你據(jù)理力爭(zhēng)的挑站領(lǐng)導(dǎo)權(quán)威的時(shí)候,領(lǐng)導(dǎo)還把你視為異類。哎,想起這樣的領(lǐng)導(dǎo)別說(shuō)是罵人了,打人的沖動(dòng)都有了。
其實(shí),經(jīng)理只不過(guò)是一個(gè)團(tuán)隊(duì)的支持者,他應(yīng)該幫助團(tuán)隊(duì),為團(tuán)隊(duì)排憂解難。而不是對(duì)團(tuán)隊(duì)發(fā)號(hào)施令。其實(shí)管理真的很簡(jiǎn)單,如果懂的話,就幫著做,如果不懂的話,就相信下屬,放手讓下屬做。最怕的就是又不懂技術(shù),還不信任下屬的經(jīng)理了。哎,這真是程序員的痛啊。
第六位 用戶文檔
用戶文檔本來(lái)不應(yīng)該那么的令人害怕。這些文檔記錄了一切和我們所開(kāi)發(fā)的軟件有關(guān)的一些話題。因?yàn)槲覀儾⒉恢牢覀兯鎸?duì)的用戶的電腦操作基礎(chǔ)是什么樣的,所以,在寫下這樣的文檔的時(shí)候,我們必需假設(shè)這個(gè)用戶什么也不懂。于是,需要用最清楚,最漂亮的語(yǔ)言寫下一個(gè)最豐富的文檔。那怕一個(gè)拷貝粘貼的操作,可能我們都要分成五、六步來(lái)完成,那怕是一個(gè)配置IP地址的操作,我們也要從開(kāi)始菜單開(kāi)始一步一步的描述。對(duì)于程序員來(lái)說(shuō),他們?cè)陂_(kāi)發(fā)過(guò)程中幾乎天天都在使用自己開(kāi)發(fā)的軟件,到最后,可能都有點(diǎn)吐了,但還得從最簡(jiǎn)單的部份寫這些文檔,當(dāng)然容易令他們煩燥,讓程序員來(lái)完成這樣的文檔可能效果會(huì)非常不好。所以,對(duì)于這樣的用戶文檔,應(yīng)該由專門的文檔人員來(lái)完成和維護(hù)。
第五位 沒(méi)有文檔
正如上一條所說(shuō)的,程序員本來(lái)就不喜歡寫文檔,而因?yàn)榧夹g(shù)人員的表達(dá)能力和寫作能力一般都不是太好,所以,文檔寫的也很爛。看看開(kāi)源社區(qū)的文檔可能就知道了。但是,我們可愛(ài)的程序員另一方面最生氣的卻是因?yàn)闆](méi)有文檔。當(dāng)然,上面說(shuō)的是用戶的文檔,這里我們說(shuō)的是開(kāi)發(fā)方面的文檔,比如設(shè)計(jì)文檔,功能規(guī)格,維護(hù)文檔等等。不過(guò),基本上都是一樣的。反正,一方面,我們的程序員不喜歡寫文檔,另一方面,我們的程序又會(huì)被抱怨沒(méi)有文檔,文檔太少,或者文檔看不懂。呵呵。原來(lái)在抱怨方面也有遞歸啊。據(jù)說(shuō),敏捷開(kāi)發(fā)可以降低程序開(kāi)發(fā)中的文檔,據(jù)說(shuō)他們可以把代碼寫得跟文檔和示圖似的,不知道是真是假。不過(guò),我聽(tīng)過(guò)太多太多的程序員抱怨沒(méi)文檔太少,文檔太差了,這個(gè)方面要怪還是怪程序員自己。
第四位 部署環(huán)境
雖然,程序員們開(kāi)發(fā)的是軟件,但是我們并不知道我們的程序會(huì)被部署或安裝在什么樣的環(huán)境下,比如,網(wǎng)絡(luò)上的不同,RAID上的不同,BIOS上的不同,操作系統(tǒng)的不同(WinXP和Win2003),有沒(méi)有殺毒軟件,和其它程序是否兼容,系統(tǒng)中有流氓軟件或病毒等等。當(dāng)然,只要你的軟件出現(xiàn)錯(cuò)誤,無(wú)論是你的程序的問(wèn)題,還是環(huán)境的問(wèn)題,反正都是你的問(wèn)題,你都得全部解決。所以,程序員們并不是簡(jiǎn)單地在編程,很多時(shí)候,還要當(dāng)好一個(gè)不錯(cuò)的系統(tǒng)管理員。每當(dāng)最后確認(rèn)問(wèn)題的原因是環(huán)境問(wèn)題的時(shí)候,可能程序員都是會(huì)心生怨氣。
第三位 問(wèn)題報(bào)告
我的軟件不工作了,程序出錯(cuò)了,每當(dāng)我們聽(tīng)到這樣的問(wèn)題報(bào)告的時(shí)候,程序員總是感到很痛苦,因?yàn)檫@樣的問(wèn)題報(bào)告等于什么也沒(méi)有說(shuō),但還要程序員去處理這種錯(cuò)誤。沒(méi)有明確的問(wèn)題描述,沒(méi)有說(shuō)明如何重現(xiàn)問(wèn)題,在感覺(jué)上,當(dāng)然會(huì)顯得有點(diǎn)被人質(zhì)問(wèn)的感覺(jué),甚至,在某些時(shí)候還摻雜著看不起,訓(xùn)斥的語(yǔ)氣,當(dāng)然,程序員基本上都是很有個(gè)性的,都是軟硬不吃的主兒。所以,每當(dāng)有這樣的語(yǔ)氣報(bào)告問(wèn)題的時(shí)候,他們一般也會(huì)把話給頂回去,當(dāng)然,后面自己然發(fā)生一些不愉快的事情。所以,咱們還是需要一個(gè)客服部門來(lái)幫助我們的程序員和用戶做好溝通。
第二位 程序員自己
惹毛程序員的可能還是程序員自己,程序員是相輕的,他們基本上都是恃才傲物的,總是覺(jué)得自己才是最牛的,在程序員間,他們幾乎每天都要吵架,而且一吵就吵得臉紅脖子粗。在他們之間,他們總是被自己惹毛。
技術(shù)上的不同見(jiàn)解。比如Linux和Win,VC++和VB,Vi和Emacus,Java和C++,PHP和Ruby等等,等等。什么都要吵。
老手對(duì)新手的輕視。總是有一些程序員看不起另一些程序員,說(shuō)話間都帶著一種傲慢和訓(xùn)斥。當(dāng)新手去問(wèn)問(wèn)題的時(shí)候,老手們總是愛(ài)搭不理。
在技術(shù)上不給對(duì)方留面子。不知道為什么,程序員總是不給對(duì)方留面子,每當(dāng)聽(tīng)到有人錯(cuò)誤理解某個(gè)技術(shù)的時(shí)候,他們總是喜歡當(dāng)眾大聲指證,用別人的錯(cuò)誤來(lái)表明自己的博學(xué),并證明他人的無(wú)知。
喜好鄙視。他們喜好鄙視,其實(shí),這個(gè)世界上沒(méi)有一件事是完美的,有好就有不好,要挑毛病太容易了。程序員們特別喜歡鄙視別人,無(wú)論是什么的東西,他們總是喜歡看人短而不看人長(zhǎng)。經(jīng)常掛在他們嘴上的口頭禪是太差、不行等等。
程序員,長(zhǎng)期和電腦打交道,編寫出的代碼電腦總是認(rèn)真的運(yùn)行,長(zhǎng)期養(yǎng)成了程序員們目空一切的性格,卻不知,這個(gè)世界上很多東西并不是能像電腦一樣,只要我們輸入正確的指令它就正確地運(yùn)行這么簡(jiǎn)單。程序員,什么時(shí)候才能變得成熟起來(lái)
第一位 程序員的代碼
無(wú)論你當(dāng)時(shí)覺(jué)得自己的設(shè)計(jì)和寫的代碼如何的漂亮和經(jīng)典,過(guò)上一段時(shí)間后,再回頭看看,你必然會(huì)覺(jué)得自己的愚蠢。當(dāng)然,當(dāng)你需要去維護(hù)他人的代碼的時(shí)候,你一定要在一邊維護(hù)中一邊臭罵別人的代碼。是否你還記得當(dāng)初怎么怎么牛氣地和別人討論自己的設(shè)計(jì)和自己的代碼如何如何完美的?可是,用不了兩年,一剛從學(xué)校畢業(yè)的學(xué)生在維護(hù)你的代碼的過(guò)程當(dāng)中就可以對(duì)你的代碼指指點(diǎn)點(diǎn),讓你的顏面完全掃地。
呵呵。當(dāng)然,也有的人始終覺(jué)得自己的設(shè)計(jì)和代碼就是最好的,不過(guò)這是用一種比較靜止的眼光來(lái)看問(wèn)題。編程這個(gè)世界變化總是很快的的,很多事情,只有當(dāng)我們做過(guò),我們才熟悉他,熟悉了后才知道什么是更好的方法,這是循序漸進(jìn)的。所以,當(dāng)你對(duì)事情越來(lái)越熟悉的時(shí)候,再回頭看自己以前做的設(shè)計(jì)和代碼的時(shí)候,必然會(huì)覺(jué)得自己的膚淺和愚蠢,當(dāng)然看別人的設(shè)計(jì)和代碼時(shí),可能也會(huì)開(kāi)始罵人了。
1、貓?jiān)诰毩?xí)長(zhǎng)跑,烏龜諷刺道:再練,也不能跑出個(gè)長(zhǎng)跑冠軍!貓答:我成不了豹子,卻能做最棒的貓!是的,努力做好自己,做到最棒,就是成功!
2、一萬(wàn)元以內(nèi)的奢侈品,可以買,但不可以炫耀。
3、別人可以拷貝我的模式,不能拷貝我的苦難,不能拷貝我不斷往前的激情。
4、就算月掙3000,房租(貸)2000,但該請(qǐng)客的時(shí)候也決不含糊。
5、買個(gè)鬧鐘,以便按時(shí)叫醒你:
自貪睡和不守時(shí),都將成為你工作和事業(yè)上的絆腳石,任何時(shí)候都一樣。不僅要學(xué)會(huì)準(zhǔn)時(shí),更要學(xué)會(huì)提前。就如你坐車去某地,沿途的風(fēng)景很美,你忍不住下車看一看,后來(lái)雖然你還是趕到了某地,卻不是準(zhǔn)時(shí)到達(dá)。“鬧鐘”只是一種簡(jiǎn)單的標(biāo)志和提示,真正靈活、實(shí)用的時(shí)間,掌握在每個(gè)人的心中。
6、如果你不喜歡現(xiàn)在的工作,要么辭職不干,要么就閉嘴不言:
初出茅廬,往往眼高手低,心高氣傲,大事做不了,小事不愿做。不要養(yǎng)成挑三揀四的習(xí)慣。不要雨天煩打傘,不帶傘又怕淋雨,處處表現(xiàn)出不滿的情緒。記住,不做則已,要做就要做好。
7、權(quán)威是你把權(quán)給別人的時(shí)候,你才能有真正的權(quán)利,你懂得傾聽(tīng)、懂得尊重,承擔(dān)責(zé)任的時(shí)候,別人一定會(huì)聽(tīng)你,你才會(huì)有權(quán)威。
8、一個(gè)成功的創(chuàng)業(yè)者,三個(gè)因素,眼光、胸懷和實(shí)力。
9、機(jī)會(huì)從不會(huì)“失掉”,你失掉了,自有別人會(huì)得到:
不要凡事在天,守株待兔,更不要寄希望于“機(jī)會(huì)”。機(jī)會(huì)只不過(guò)是相對(duì)于充分準(zhǔn)備而又善于創(chuàng)造機(jī)會(huì)的人而言的。也許,你正為失去一個(gè)機(jī)會(huì)而懊悔、埋怨的時(shí)候,機(jī)會(huì)正被你對(duì)面那個(gè)同樣的“倒霉鬼”給抓住了。沒(méi)有機(jī)會(huì),就要?jiǎng)?chuàng)造機(jī)會(huì),有了機(jī)會(huì),就要巧妙地抓住。
10、若電話老是不響,你該打出去:
很多時(shí)候,電話會(huì)給你帶來(lái)意想不到的收獲,它不是花瓶,僅僅成為一種擺設(shè)。交了新朋友,別忘了老朋友,朋友多了路好走。交際的一大訣竅就是主動(dòng)。好的人緣好的口碑,往往助你的事業(yè)更上一個(gè)臺(tái)階。
11、永遠(yuǎn)把別人對(duì)你的批評(píng)記在心里,別人的表?yè)P(yáng),就把它忘了。
12、有時(shí)候心理因素可能比外界的因素有更大的影響,所以一個(gè)人的心態(tài)非常重要。很多人總是很不滿足,說(shuō)我為什么不如那個(gè)人好,我為什么掙的錢不如那個(gè)人多,這樣的心態(tài)可能會(huì)導(dǎo)致自己越來(lái)越浮躁,也不會(huì)讓自己覺(jué)得幸福。
13、神要是公然去跟人作對(duì),那是任何人都難以對(duì)付的。
14、善良人在追求中縱然迷惘,卻終將意識(shí)到有一條正途。
15、認(rèn)識(shí)自己的無(wú)知是認(rèn)識(shí)世界的最可靠的方法。
16、不想當(dāng)將軍的士兵不是好士兵,但是一個(gè)當(dāng)不好士兵的將軍一定不是好將軍。
17、如果冬天來(lái)了,春天還會(huì)遠(yuǎn)嗎
18、哪里燒書(shū),哪里接著就會(huì)把人也扔進(jìn)火堆。
19、黑夜給了我黑色的眼睛,我卻用它尋找光明。
20、賺錢模式越多越說(shuō)明你沒(méi)有模式。
21、永遠(yuǎn)要相信邊上的人比你聰明。
22、上當(dāng)不是別人太狡猾,而是自己太貪,是因?yàn)樽约翰艜?huì)上當(dāng)。
23、一個(gè)一流的創(chuàng)意,三流的執(zhí)行,我寧可喜歡一個(gè)一流的執(zhí)行,三流的創(chuàng)意。
24、最優(yōu)秀的模式往往是最簡(jiǎn)單的東西。
25、要少開(kāi)店、開(kāi)好店,店不在于多,而在于精。
26、創(chuàng)業(yè)者書(shū)讀得不多沒(méi)關(guān)系,就怕不在社會(huì)上讀書(shū)。
27、很多人失敗的原因不是錢太少,而是錢太多。
28、創(chuàng)業(yè)者光有激情和創(chuàng)新是不夠的,它需要很好的體系、制度、團(tuán)隊(duì)以及良好的盈利模式。
29、不要貪多,做精做透很重要,碰到一個(gè)強(qiáng)大的對(duì)手或者榜樣的時(shí)候,你應(yīng)該做的不是去挑戰(zhàn)它,而是去彌補(bǔ)它。
30、這世界上沒(méi)有優(yōu)秀的理念,只有腳踏實(shí)地的結(jié)果。
31、如果你看了很多書(shū),千萬(wàn)別告訴別人,告訴別人別人就會(huì)不斷考你。
32、小企業(yè)有大的胸懷,大企業(yè)要講細(xì)節(jié)的東西。
33、所有的創(chuàng)業(yè)者應(yīng)該多花點(diǎn)時(shí)間,去學(xué)習(xí)別人是怎么失敗的。
34、關(guān)注對(duì)手是戰(zhàn)略中很重要的一部分,但這并不意味著你會(huì)贏。
35、不管你擁有多少資源,永遠(yuǎn)把對(duì)手想得強(qiáng)大一點(diǎn)。
36、80年代的人不要跟70年代、60年代的人競(jìng)爭(zhēng),而是要跟未來(lái),跟90年代的人競(jìng)爭(zhēng),這樣你才有贏的可能性。
37、必須先去了解市場(chǎng)和客戶的需求,然后再去找相關(guān)的技術(shù)解決方案,這樣成功的可能性才會(huì)更大。
38、最核心的問(wèn)題是根據(jù)市場(chǎng)去制定你的產(chǎn)品,關(guān)鍵是要傾聽(tīng)客戶的聲音。
39、世界上最寶貴的財(cái)富就是時(shí)間,所以不要浪費(fèi)一分一秒!
40、免費(fèi)是世界上最昂貴的東西。所以盡量不要免費(fèi)。等你有了錢以后再考慮免費(fèi)。
41、誠(chéng)信絕對(duì)不是一種銷售,更不是一種高深空洞的理念,它是實(shí)實(shí)在在的言出必行、點(diǎn)點(diǎn)滴滴的細(xì)節(jié)。
42、短暫的激情是不值錢的,只有持久的激情才是賺錢的。
43、我自己不愿意聘用一個(gè)經(jīng)常在競(jìng)爭(zhēng)者之間跳躍的人。
44、多花點(diǎn)時(shí)間在你的其他員工身上。
45、什么是團(tuán)隊(duì)呢?團(tuán)隊(duì)就是不要讓團(tuán)隊(duì)的任何一個(gè)人失敗。
46、創(chuàng)業(yè)時(shí)期千萬(wàn)不要找明星團(tuán)隊(duì),千萬(wàn)不要找已經(jīng)成功過(guò)的人,創(chuàng)業(yè)要找最適合的人,不要找最好的人。
47、最大的挑戰(zhàn)和突破在于用人,而用人最大的突破在于信任人。
48、碰到災(zāi)難第一個(gè)想到的是你的客戶,第二想到你的員工,其他才是想對(duì)手。
49、永遠(yuǎn)記住每次成功都可能導(dǎo)致你的失敗,每次失敗好好接受教訓(xùn),也許就會(huì)走向成功。
50、可能一個(gè)人說(shuō)你不服氣,兩個(gè)人說(shuō)你不服氣,很多人在說(shuō)的時(shí)候,你要反省,一定是自己出了一些問(wèn)題。
51、從創(chuàng)業(yè)得第一天起,你每天要面對(duì)的是困難和失敗,而不是成功。我最困難的時(shí)候還沒(méi)有到,但有一天一定會(huì)到。困難不是不能躲避,不能讓別人替你去抗。九年創(chuàng)業(yè)的經(jīng)驗(yàn)告訴我,任何困難都必須你自己去面對(duì)。創(chuàng)業(yè)者就是面對(duì)困難。
52、我認(rèn)為,員工第一,客戶第二。沒(méi)有他們,就沒(méi)有阿里巴巴。也只有他們開(kāi)心了,我們的客戶才會(huì)開(kāi)心。而客戶們那些鼓勵(lì)的言語(yǔ),鼓勵(lì)的話,又會(huì)讓他們像發(fā)瘋一樣去工作,這也使得我們的網(wǎng)站不斷地發(fā)展。”
53、不要在乎別人如何看你,要在乎你自己如何看未來(lái),看夢(mèng)想,看世界..!
54、一個(gè)年輕人,如果三年的時(shí)間里,沒(méi)有任何想法,他這一生,就基本這個(gè)樣子,沒(méi)有多大改變了。
55、與人交往的時(shí)候,多聽(tīng)少說(shuō)。這就是,上帝為什么給我們一個(gè)嘴巴兩個(gè)耳朵的原因。
56、不要隨便說(shuō)臟話,這會(huì)讓別人覺(jué)得你沒(méi)涵養(yǎng),不大愿意和你交往。即使交往,也是敷衍,因?yàn)樗麅?nèi)心認(rèn)定你素質(zhì)很差。
57、要想進(jìn)步,就只有吸取教訓(xùn),成功的經(jīng)驗(yàn)都是歪曲的,成功了,想怎么說(shuō)都可以,失敗者沒(méi)有發(fā)言權(quán),可是,你可以通過(guò)他的事例反思,總結(jié)。教訓(xùn),不僅要從自己身上吸取,還要從別人身上吸取。
58、大學(xué)畢業(yè)了,不是學(xué)習(xí)結(jié)束了,而是剛剛開(kāi)始了!
59、記住,平均每天看電視超過(guò)三個(gè)小時(shí)以上的,平均每天玩網(wǎng)絡(luò)游戲或聊天超過(guò)三個(gè)小時(shí)以上的,一定都是那些月收入不超過(guò)三千元的,如果你想要月收入超過(guò)三千,請(qǐng)不要把時(shí)間浪費(fèi)在電視和虛幻的網(wǎng)絡(luò)上。
60、平時(shí)多和你的朋友溝通交流一下,不要等到需要朋友的幫助時(shí),才想到要和他們聯(lián)系,到了社會(huì),你才會(huì)知道,能夠認(rèn)識(shí)一個(gè)真正的朋友,有多難?
61、如果你想知道自己將來(lái)的年收入如何。找你最經(jīng)常來(lái)往的六個(gè)朋友,把他們的年收入加起來(lái),除以六,就差不多是你的了。
62、關(guān)于愛(ài)情,有這么一句話,沒(méi)有面包,怎么跳舞?無(wú)論什么時(shí)候,你決定去好好愛(ài)一個(gè)人的時(shí)候,一定要考慮給她你能給予的最好的物質(zhì)生活。
63、給自己定一個(gè)五年的目標(biāo),然后,把它分解成一年一年,半年半年的,三個(gè)月的,一個(gè)月的。這樣,你才能找到自己的目標(biāo)和方向。
64、這個(gè)世界上沒(méi)有免費(fèi)的午餐,永遠(yuǎn)不要走捷徑!
65、這個(gè)世界上有很多天才,天才是用來(lái)欣賞的,不是用來(lái)攀比的。
66、要每天多努力一些,比別人多努力一個(gè)小時(shí)。
67、女人的溫柔和男人的成就是成正比的。
68、那些私下忠告我們,指出我們錯(cuò)誤的人,才是真正的朋友。
69、我們公司是每半年一次評(píng)估,評(píng)下來(lái),雖然你的工作很努力,也很出色,但你就是最后一個(gè),非常對(duì)不起,你就得離開(kāi)。
70、一個(gè)好的企業(yè)靠輸血是活不久的,關(guān)鍵是要自己去造血。
71、有干勁,你就灑下汗水;有知識(shí),你就獻(xiàn)出智慧;二者都不具備,請(qǐng)你讓出崗位。
72、好心態(tài)才有好狀態(tài)。
73、從無(wú)到有,是件快樂(lè)的事。而從有到無(wú),同樣是種快感。
74、看別人不順眼,首先是自己修養(yǎng)不夠。
75、從最不滿意的客戶身上,學(xué)到的東西最多。
76、有志不在年高,無(wú)志空活百歲。
77、一個(gè)人快樂(lè)不是因?yàn)樗麚碛械枚啵且驗(yàn)橛?jì)較得少。
78、聽(tīng)不到奉承的人是一種幸運(yùn),聽(tīng)不到批評(píng)的人卻是一種危險(xiǎn)。
79、世界上還有很多事情,只要你把它做透了,做成專家,你就能夠?yàn)樽约簞?chuàng)造成功的機(jī)會(huì)。
80、團(tuán)隊(duì)核心成員有人要提出辭職時(shí),不要挽留,既然提出了,他遲早是要走的。
81、初中水平跟博士后沒(méi)啥區(qū)別。只要能干就行,我一直是這個(gè)觀點(diǎn),不在乎學(xué)歷,只要能干能做出貢獻(xiàn)就行。
82、所謂人才,就是你交給他一件事情,他做成了;你再交給他一件事情,他又做成了。
83、生活是不公平的,要去適應(yīng)它。
84、生活中你沒(méi)有暑假可以休息,也無(wú)人幫你發(fā)現(xiàn)自我
85、天賦就是興趣 興趣就是天賦
86、挫折不是懲罰 而是學(xué)習(xí)的機(jī)會(huì)
87、在學(xué)習(xí)上不肯鉆研的人是不會(huì)提出問(wèn)題的;在事業(yè)上缺乏突破力的人是不會(huì)有所創(chuàng)新的。
88、自學(xué)如果缺乏恒心,專業(yè)知識(shí)就無(wú)法得到鞏固。
89、時(shí)間,就象海棉里的水,只要愿擠,總還是有的。
90、書(shū)讀得越多而不加思索,你就會(huì)覺(jué)得你知道得很多;而當(dāng)你讀書(shū)而思考得越多的時(shí)候,你就會(huì)越清楚地看到,你知道得還很少。
91、如果顧客不喜歡,那該產(chǎn)品就是有缺陷。
92、當(dāng)許多人在一條路上徘徊不前時(shí),他們不得不讓開(kāi)一條大路,讓那珍惜時(shí)間的人趕到他們的前面去。
93、從不浪費(fèi)時(shí)間的人,沒(méi)有工夫抱怨時(shí)間不夠。
94、合理安排時(shí)間,就等于節(jié)約時(shí)間。
95、聰明出于勤奮,天才在于積累。
96、如果你做某件事,那就把它做好;如果你不會(huì)或不愿做好它,那最好不要去做。
97、學(xué)習(xí)這件事,不在乎有沒(méi)有人教你,最重要的是在于你自己有沒(méi)有覺(jué)悟和恒心。
98、一個(gè)人的工作職位不怕低,只要你不放棄你的理想,拿目前的工作做一個(gè)踏腳石,一方面維持生活,一方面找時(shí)間充實(shí)自己,認(rèn)準(zhǔn)一個(gè)確定的方向去努力。慢慢的,你總會(huì)發(fā)現(xiàn),你的努力沒(méi)有白費(fèi)。
99、沒(méi)有任何動(dòng)物比螞蟻更勤奮,然而它卻最沉默寡言。
100、千里之堤毀于蟻穴。
子線程先循環(huán)10次,然后主線程循環(huán)100次,再子線程循環(huán)10次,主線程循環(huán)100次,就這樣循環(huán)往復(fù)50次。
public class Communtion01 {
public static void main(String args[]) {
final Bussiness buss = new Bussiness();
new Thread(new Runnable() {
public void run() {
for (int j = 1; j <= 50; j++) {
buss.sub(j);
}
}
}).start();
for (int j = 1; j <= 50; j++) {
buss.main(j);
}
}
}
class Bussiness {
private boolean subFlag = true;
//Cpu照顧sub線程,執(zhí)行到sub(),但還不該sub執(zhí)行,那就wait
public synchronized void sub(int j) {
while (!subFlag) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 1; i <= 10; i++) {
System.out.println(Thread.currentThread().getName() + "在第" + j
+ "次循環(huán)了" + i);
}
subFlag = false;
this.notify();
}
public synchronized void main(int j) {
while(subFlag) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i =1; i <=100; i++) {
System.out.println(Thread.currentThread().getName() + "在第" + j
+ "次循環(huán)了" + i);
}
subFlag = true;
this.notify();
}
}
經(jīng)驗(yàn):要用到共同數(shù)據(jù)(包括同步鎖)或共同算法的若干方法應(yīng)該歸在同一個(gè)類身上,這種設(shè)計(jì)體現(xiàn)了高類聚和程序的健壯性。
互斥、同步、通信問(wèn)題的邏輯不是寫在線程代碼上,而是在線程訪問(wèn)那個(gè)資源類上。
第一個(gè)示例更多的是運(yùn)用了內(nèi)部類的特性:
內(nèi)部類重要特點(diǎn):可以訪問(wèn)外部的成員變量,所以內(nèi)部類不能在靜態(tài)方法中實(shí)例化。
因?yàn)殪o態(tài)方法運(yùn)行時(shí)不需要?jiǎng)?chuàng)建實(shí)例對(duì)象,而內(nèi)部類想要訪問(wèn)成員變量,意味著外部類肯定要?jiǎng)?chuàng)建實(shí)例對(duì)象,二者相互矛盾。
所以下面就會(huì)報(bào)錯(cuò)
public class Synchronized01 {
public static void main(String args[]) {
)
// final Outputer outputer=new Outputer(); //這樣做就沒(méi)有成員變量可以訪問(wèn)
// new Thread(new Runnable(){
//
// public void run() {
// while(true){
// try {
// Thread.sleep(10);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// outputer.outputer("zhangsan");
// }
// }}).start();
}
class Outputer {
void outputer(String name) {
int len = name.length();
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}
}
}
但如果改成這樣就沒(méi)有問(wèn)題
public class Synchronized01 {
public static void main(String args[]) {
new Synchronized01().init();
}
// 此方法被調(diào)用時(shí)一定創(chuàng)建了外部類對(duì)象
private void init() {
// 運(yùn)行時(shí)找外部類對(duì)象,找調(diào)用init方法的對(duì)象
final Outputer outputer = new Outputer();
new Thread(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
outputer.outputer("zhangsan");
}
}
}).start();
new Thread(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
outputer.outputer("lisi");
}
}
}).start();
}
class Outputer {
void outputer(String name) {
int len = name.length();
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}
}
}
運(yùn)行結(jié)果
lisi zhangsan lisi zhangsan lisi zhangsan lisi zhangsan lisi zhangsan
lisi zhangsan lisi zhangsan lisi zhanlgissain
zlhiasnig san lzihsain gsan zlhiasnig san zlhiasnig san zlhiasnig san
zlhiasnigsan zlhiasnig san lzihsain gsan lisi zhangsan lisi
解決方法
修改Ouputer
class Outputer {
public void outputer(String name) {
int len = name.length();
synchronized (this) {// 兩個(gè)線程用的是同一個(gè)outputer對(duì)象
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}
}
// synchronized要在void之前
// 一個(gè)方法只能有一個(gè)synchronized,不然可能會(huì)造成死鎖
public synchronized void outputer2(String name) {
int len = name.length();
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}
}
// class Outputer {
// String xxx = "";
//
// public void outputer(String name) {
// int len = name.length();
// xxx必須是同一個(gè)對(duì)象,如果是name就仍然會(huì)出錯(cuò) name是兩個(gè)對(duì)象
// synchronized (xxx) {
// for (int i = 0; i < len; i++) {
// System.out.print(name.charAt(i));
// }
// System.out.println();
// }
// }
//
// }
但如果每個(gè)run()中這樣寫new Outputer()然后調(diào)用outputer(name)仍然會(huì)出錯(cuò),因?yàn)槊看蝞ew都是產(chǎn)生一個(gè)新的對(duì)象,而synchronized關(guān)鍵是針對(duì)同一個(gè)對(duì)象。
public class Synchronized02 {
public static void main(String[] args) {
new Synchronized02().init();
}
private void init() {
final Outputer outputer = new Outputer();
new Thread(new Runnable() {
public void run() { // 要執(zhí)行的操作
while (true) { // 循環(huán)操作
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
outputer.outputer("zhangsan");
}
}
}).start();
new Thread(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
outputer.outputer("lisi");
//這樣仍然會(huì)出問(wèn)題 ----不是同一個(gè)對(duì)象。
// new Outputer().outputer("lisi"); }
}
}).start();
}
class Outputer {
public void outputer(String name) {
int len = name.length();
synchronized (this) {// 兩個(gè)線程用的是同一個(gè)outputer對(duì)象
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}
}
// synchronized要在void之前
// 一個(gè)方法只能有一個(gè)synchronized,不然可能會(huì)造成死鎖
public synchronized void outputer2(String name) {
int len = name.length();
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}
}
// class Outputer {
// String xxx = "";
//
// public void outputer(String name) {
// int len = name.length();
// xxx必須是同一個(gè)對(duì)象,如果是name就仍然會(huì)出錯(cuò) name是兩個(gè)對(duì)象
// synchronized (xxx) {
// for (int i = 0; i < len; i++) {
// System.out.print(name.charAt(i));
// }
// System.out.println();
// }
// }
//
// }
}
一個(gè)內(nèi)部類前面加上static就變成了外部類
靜態(tài)方法只能在外部類中聲明
靜態(tài)方法只和字節(jié)碼對(duì)象有關(guān)
public class Synchronized03 {
public static void main(String[] args) {
new Synchronized03().init();
}
private void init() {
final Outputer outputer = new Outputer();
new Thread(new Runnable() {
public void run() { // 要執(zhí)行的操作
while (true) { // 循環(huán)操作
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
outputer.outputer("zhangsan");
}
}
}).start();
new Thread(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
outputer.outputer2("lisi");
}
}
}).start();
}
static class Outputer { // 加上static 相當(dāng)于是個(gè)外部類
public void outputer(String name) {
int len = name.length();
// 靜態(tài)方法不創(chuàng)建類的實(shí)例對(duì)象,創(chuàng)建字節(jié)碼對(duì)象,靜態(tài)方法運(yùn)行時(shí)只和字節(jié)碼對(duì)象關(guān)聯(lián)
synchronized (Outputer.class) {
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}
}
// synchronized要在void之前
// 靜態(tài)方法只能在外部類中聲明
public static synchronized void outputer2(String name) {
int len = name.length();
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}
}
}
在T公司工作快一年了,剛進(jìn)入公司就參與到項(xiàng)目的開(kāi)發(fā)中,開(kāi)發(fā)小組加上我一共5個(gè)人。公司下達(dá)的任務(wù)是在一個(gè)月的時(shí)間必須完成這個(gè)項(xiàng)目,接下來(lái)進(jìn)行的就是很多軟件公司常用方式:加班,沒(méi)日沒(méi)夜的加班。所以我剛進(jìn)入公司的一個(gè)月是在加班中度過(guò)的。加班的好處有很多,比如:提升了技術(shù),更快地融入了團(tuán)隊(duì),但也有壞處,特別是對(duì)剛進(jìn)入公司的我,最后由于高強(qiáng)度的加班,再加上公司垃圾的工作環(huán)境,最后造成了頸椎出了問(wèn)題。
之所以選擇這家公司,是因?yàn)樵趯W(xué)校時(shí)聽(tīng)說(shuō)這家公司很不錯(cuò)(很久以前確實(shí)很牛),但進(jìn)入公司后發(fā)現(xiàn)不是那么回事,至少我所在的組是這樣的。
坦白的說(shuō)我不喜歡甚至討厭第一個(gè)項(xiàng)目經(jīng)理S,S向下對(duì)組內(nèi)成員從沒(méi)有關(guān)心過(guò),每當(dāng)項(xiàng)目快完成時(shí)就說(shuō)“做完了這個(gè)項(xiàng)目拉上測(cè)試組我們舉行一次聚餐”,但直到S最后離開(kāi)公司的那天他才舉行了一次他花費(fèi)了200多塊錢請(qǐng)了10多個(gè)人的餐會(huì)。很少見(jiàn)S在技術(shù)上幫助組內(nèi)成員,就算是進(jìn)行一些指導(dǎo)也不是技術(shù)人員該有的交流溝通,而是當(dāng)作一種恩賜賞給下屬。項(xiàng)目完成后不能看到別人沒(méi)活干,比如瀏覽ITeye、學(xué)一些自己感興趣的技術(shù),看到你沒(méi)活干立馬給你分配任務(wù),不讓你有喘息的機(jī)會(huì)。
組中兩個(gè)有差不多兩年開(kāi)發(fā)經(jīng)驗(yàn),其中一個(gè)帶我的A,另一個(gè)負(fù)責(zé)一個(gè)項(xiàng)目維護(hù)的B。項(xiàng)目經(jīng)理常常和B爭(zhēng)吵,和項(xiàng)目經(jīng)理相比B的經(jīng)驗(yàn)各方面肯定不如項(xiàng)目經(jīng)理,所以每當(dāng)B關(guān)于項(xiàng)目提出一些自己的觀點(diǎn),垃圾項(xiàng)目經(jīng)理就會(huì)把B批的體無(wú)完膚,而且經(jīng)常是抓住一些無(wú)關(guān)緊要的問(wèn)題批評(píng),其他組人員看到就想楱我們項(xiàng)目經(jīng)理(包括我)。向上不知道項(xiàng)目經(jīng)理怎么和領(lǐng)導(dǎo)溝通,但通過(guò)項(xiàng)目的數(shù)量、進(jìn)度就可以得知項(xiàng)目經(jīng)理不會(huì)和領(lǐng)導(dǎo)溝通,而且沒(méi)有地位。這在我們分到另一個(gè)組,通過(guò)另一個(gè)項(xiàng)目經(jīng)理的交流得到了證實(shí)。
總之,我非常討厭前任項(xiàng)目經(jīng)理,不是因?yàn)樗麑?duì)我做了什么,而是對(duì)我們身邊的開(kāi)發(fā)人員所作所為非常不滿。所以當(dāng)他宣布他要離開(kāi)這家公司時(shí),我悲傷的臉上掩飾不住興奮的表情。
第一個(gè)項(xiàng)目經(jīng)理走后我們組就被另一個(gè)項(xiàng)目經(jīng)理Y接管(Y被認(rèn)為是公司的一個(gè)傳奇人物),一到另一個(gè)組就獲得了自由的感覺(jué):只要分配給你的任務(wù)完成,你就可以研究你喜歡的技術(shù)了,而且每周都會(huì)舉行一次聚餐來(lái)加強(qiáng)組內(nèi)成員的溝通、交流。在Y帶領(lǐng)下參與了另一個(gè)項(xiàng)目開(kāi)發(fā),雖然在這個(gè)組也是很累,因?yàn)楫吘惯€在這個(gè)公司,但已經(jīng)沒(méi)有了前任項(xiàng)目經(jīng)理S那時(shí)的陰影,所以整體感覺(jué)還是很不錯(cuò)的。通過(guò)和Y交流得知領(lǐng)導(dǎo)分配給他任務(wù)時(shí)不是一味的討好領(lǐng)導(dǎo)(至少不委曲求全),而是也接這個(gè)項(xiàng)目,但時(shí)間必須延長(zhǎng),不然不做。這樣Y管轄項(xiàng)目通常時(shí)間充足,開(kāi)發(fā)人員也不是很累,最后也完成了任務(wù)。而S,不管領(lǐng)導(dǎo)分配什么項(xiàng)目就接(估計(jì)和他根本沒(méi)什么拿得出手的項(xiàng)目有關(guān)),從不考慮組內(nèi)成員的承受能力,最后結(jié)果可想而知。
很遺憾的是,當(dāng)前任項(xiàng)目經(jīng)理S離職不久,公司就進(jìn)入了離職“熱潮”,公司里有經(jīng)驗(yàn)的開(kāi)發(fā)人員幾乎都走了,因?yàn)楣咎邌荩豢铣龈邇r(jià)挽留人才,所以這股“離職風(fēng)”一直持續(xù)了半年,最后我們組也不能幸免。組內(nèi)有經(jīng)驗(yàn)的開(kāi)發(fā)人員都走了,包括A、B。直到一個(gè)研究生學(xué)歷的開(kāi)發(fā)人員W也走了,Y坐不住了,我也坐不住了。Y坐不住是因?yàn)樗F(xiàn)在負(fù)責(zé)的DS這塊已經(jīng)不是公司的主營(yíng)業(yè)務(wù),再加上手下的一個(gè)個(gè)得力干將都出去找到比他還牛的工作,也被逼無(wú)奈離開(kāi)了。我坐不住是公司的業(yè)務(wù)方向我不感興趣而且學(xué)不到想要的技術(shù),做政府業(yè)務(wù)靠的不是技術(shù),而是人脈。開(kāi)發(fā)人員水平的高低對(duì)公司業(yè)績(jī)影響很小,所以公司不注重開(kāi)發(fā)人員技術(shù)能力提高。雖然技術(shù)只是工具,最重要的是開(kāi)發(fā)思想,業(yè)務(wù)能力,但目前我最需要的或許還是技術(shù)。
回顧這一年感概良多,由于自己的心理不夠成熟、處事能力不行,再加上個(gè)人性格、修養(yǎng)的問(wèn)題錯(cuò)過(guò)了好多好多機(jī)會(huì)。
我的缺點(diǎn)是:
1. 愛(ài)抱怨---在一次封閉開(kāi)發(fā)中體現(xiàn)的淋漓盡致
2. 對(duì)他人要求嚴(yán)格----因?yàn)槲页3S羞@樣一種想法:我能做到的其他人一樣能做到,但當(dāng)有人做不到時(shí)就發(fā)揮了1的缺點(diǎn)
3. 態(tài)度不誠(chéng)懇----別人遇到問(wèn)題需要我解答時(shí),我內(nèi)心也十分樂(lè)意解答,但語(yǔ)氣、神態(tài)各方面讓人感到很不爽(我在給別的開(kāi)發(fā)人員指導(dǎo)時(shí)被W發(fā)現(xiàn)了,雖然沒(méi)有明說(shuō),但我也感覺(jué)到了不妥)
4. 太浮躁、沉不下去
5 平時(shí)說(shuō)話大大咧咧,以后需要去掉這個(gè)壞毛病
6. 不會(huì)和領(lǐng)導(dǎo)溝通,溝通時(shí)總感覺(jué)不爽,沒(méi)有將自己想要說(shuō)的說(shuō)出來(lái)。
7. 技術(shù)還亟需提高
其實(shí)總結(jié)以上缺點(diǎn)明顯最多的還是自身修養(yǎng)問(wèn)題,要想在以后的職場(chǎng)中有優(yōu)秀的表現(xiàn),自身修養(yǎng)還是非常注意的。
入門
public class Time01 {
public static void main(String[] args) {
// Timer timer01=new Timer();
// timer01.schedule(new TimerTask(){
//
// @Override
// public void run() {
//
// System.out.println("bombing");
// }}, 1000);
new Timer().schedule(new TimerTask() {
@Override
public void run() {
System.out.println("bombing");
}
}, 10000);
while (true) {
System.out.println(new Date().getSeconds());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
運(yùn)行結(jié)果
21
22
23
24
25
26
27
28
29
30
bombing
31
32
33
連續(xù)執(zhí)行
public class Time02 {
public static void main(String[] args) {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
System.out.println("bombing");
}
}, 10000,3000); //每隔3秒執(zhí)行
while (true) {
System.out.println(new Date().getSeconds());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
運(yùn)行結(jié)果:
50
51
52
53
54
55
56
57
58
59
bombing
0
1
2
bombing
3
4
5
bombing
6
7
提高
匿名內(nèi)部類是臨時(shí)的
整數(shù)分為奇數(shù)和偶數(shù),所以可以按照奇偶操作完成
/**
*一個(gè)2秒執(zhí)行,另一個(gè)4秒執(zhí)行,交替循環(huán)往復(fù)
*
*/
public class Time03 {
static int i = 0; // 靜態(tài)變量可以記錄類創(chuàng)建的對(duì)象數(shù)量
public static void main(String[] args) {
class MyTimerTask extends TimerTask {
//內(nèi)部類內(nèi)部不能生成靜態(tài)變量
public void run() {
i=(i+1)%2;
System.out.println("bombing");
new Timer().schedule(new MyTimerTask(), 2000+2000*i);
}
}
new Timer().schedule(new MyTimerTask(), 2000);
while (true) {
try {
System.out.println(new Date().getSeconds());
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
運(yùn)行結(jié)果:
13
14
bombing
15
16
17
18
bombing
19
20
bombing
21
22
23
24
bombing
25
/**
* 每天在指定的時(shí)間執(zhí)行操作
* 提供調(diào)度需求的開(kāi)源框架Quartz在這方面處理能力很強(qiáng)
*/
public class Timer04 {
public static void main(String[] args) {
String str = "2011-08-28 08:39:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Timer timer = new Timer();
try {
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("timer");
}
}, sdf.parse(str), 24 * 60 * 1000);
} catch (ParseException e) {
e.printStackTrace();
}
while (true) {
System.out.println(new Date().getSeconds());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
* 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 timer 0 1 2 3 4 5
*/
}
1.進(jìn)程與線程
每個(gè)進(jìn)程都獨(dú)享一塊內(nèi)存空間,一個(gè)應(yīng)用程序可以同時(shí)啟動(dòng)多個(gè)進(jìn)程。比如IE瀏覽器,打開(kāi)一個(gè)Ie瀏覽器就相當(dāng)于啟動(dòng)了一個(gè)進(jìn)程。
線程指進(jìn)程中的一個(gè)執(zhí)行流程,一個(gè)進(jìn)程可以包含多個(gè)線程。
每個(gè)進(jìn)程都需要操作系統(tǒng)為其分配獨(dú)立的內(nèi)存空間,而同一個(gè)進(jìn)程中的多個(gè)線程共享這塊空間,即共享內(nèi)存等資源。
每次調(diào)用java.exe的時(shí)候,操作系統(tǒng)都會(huì)啟動(dòng)一個(gè)Java虛擬機(jī)進(jìn)程,當(dāng)啟動(dòng)Java虛擬機(jī)進(jìn)程時(shí)候,Java虛擬機(jī)都會(huì)創(chuàng)建一個(gè)主線程,該線程會(huì)從程序入口main方法開(kāi)始執(zhí)行。
Java虛擬機(jī)每啟動(dòng)一個(gè)線程,就給會(huì)給該線程分配一個(gè)線程方法棧,用來(lái)存放相關(guān)信息(比如局部變量等),線程就在這個(gè)棧上運(yùn)行。所以Java對(duì)象中的局部變量都是線程安全的,但實(shí)例變量及類變量由于不是保存在棧中,所以不是線程安全的。
進(jìn)程有三種狀態(tài):就緒、執(zhí)行、阻塞。

2.線程創(chuàng)建方式
Runnable方式:(此種方式靈活,推薦使用)
public class Thread02 implements Runnable {
public static void main(String[] args) {
Runnable r = new Thread02();
Thread t1 = new Thread(r, "t1");
/**
* Thread源碼
* public Thread(Runnable target, String name) {
init(null, target, name, 0);
}
*/
Thread t2 = new Thread(r, "t2");
t1.start(); // 啟動(dòng)線程t1,處于就緒狀態(tài),等待cpu
t2.start(); // 啟動(dòng)線程t2,處于就緒狀態(tài),等待cpu
t1.run(); // 主線程main調(diào)用對(duì)象t1的run方法
}
public void run() {
System.out.println("thread's name is "
+ Thread.currentThread().getName());
}
}
運(yùn)行結(jié)果可能是:
thread's name is t1
thread's name is main
thread's name is t2
Thead方式
public class Thread03 extends Thread {
public static void main(String[] args) {
Thread03 t1 = new Thread03(); //不注意的情況下寫成了Thread t1=new Thread() 注:Thread03此時(shí)就是一個(gè)線程了
t1.start();
}
public void run() {
System.out.println("thread's name is "
+ Thread.currentThread().getName());
}
}
運(yùn)行結(jié)果:thread's name is Thread-0
注意:每次程序運(yùn)行時(shí)除了自定義的線程外還有一個(gè)main線程。
綜合:
public class Thread01 {
public static void main(String[] args) {
Thread thread=new Thread();
thread.start();//真正起作用 的是run()
/**而Thread中的run
* public void run() {
if (target != null) {
target.run();
}
}
所以自己創(chuàng)建的線程要重寫run方法,把要執(zhí)行的內(nèi)容放到run()中,所以要實(shí)現(xiàn)接口或繼承進(jìn)而產(chǎn)生子類
*/
//創(chuàng)建線程的方式1 thread子類方式(繼承)
Thread thread1=new Thread(){
public void run() {
while(true){
try {
Thread.sleep(500);//休息500毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
//Thread.currentThread()得到當(dāng)前線程
System.out.println("線程1的名字是 "+Thread.currentThread().getName());
}
}
};
// thread1.start(); //不寫 線程無(wú)法啟動(dòng)
//創(chuàng)建線程的方式2 runnable方式(實(shí)現(xiàn)) 推薦使用
Thread thread2=new Thread(new Runnable(){
public void run() {
while(true){
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("thread2'name is "+Thread.currentThread().getName());
}
}});
// thread2.start();
//執(zhí)行的是thread
new Thread(new Runnable(){
public void run() {
System.out.println("runnable "+Thread.currentThread().getName());
}}){
public void run() { //子類中的run方法覆蓋父類中的run方法,這樣就不會(huì)執(zhí)行runnable
System.out.println("thread "+Thread.currentThread().getName());
}
}.start();
}
/***
* 在單個(gè)cpu中執(zhí)行多線程很有可能降低執(zhí)行效率而不是提高 一個(gè)人在不同地方做同一件事情
*/
}
文章出自:http://blog.sina.com.cn/s/blog_66c069db0100yevq.html
經(jīng)常在一些技術(shù)論壇里看到,有人抱怨說(shuō)做開(kāi)發(fā)好多年了,技術(shù)沒(méi)有多大長(zhǎng)進(jìn),薪水也沒(méi)有提升;
經(jīng)常會(huì)碰到一些做技術(shù)外包的同學(xué),說(shuō)我天天coding,coding,今天換這個(gè)東家、明天換那個(gè)東家,代碼也寫了幾十萬(wàn)行,但幾年下來(lái),個(gè)人競(jìng)爭(zhēng)力卻沒(méi)多大提升; 也時(shí)常聽(tīng)到一些在大公司里工作的開(kāi)發(fā)人員抱怨,雖然拿著不錯(cuò)的薪水,在公司里成天就像一個(gè)螺絲釘一樣,被安排在一個(gè)細(xì)小的領(lǐng)域里,幾年下來(lái),摳來(lái)?yè)溉ィ湍屈c(diǎn)東西,實(shí)在微不足道,同行面前拿不出手,沒(méi)有成就感; 不一一列舉,相信做IT技術(shù)的人,多少都會(huì)碰到上面所說(shuō)的情況,因此,對(duì)于做IT技術(shù)的人,如何提升自身的競(jìng)爭(zhēng)力,或者說(shuō)的再俗一點(diǎn),如何能保持、提升自身的身價(jià),做一棵職場(chǎng)的常青藤,需要認(rèn)真思考一下。
最近我搜集了一下互聯(lián)網(wǎng)各大公司的招聘廣告、也觀察了一下公司里的一些技術(shù)高手的一些成長(zhǎng)特點(diǎn)、結(jié)合自己的既往的一些工作經(jīng)歷,有了一個(gè)初步的思考,雖然說(shuō)不上是找到了一條捷徑,但是在現(xiàn)階段的認(rèn)識(shí)來(lái)看,我認(rèn)為這是技術(shù)成長(zhǎng)的一條通路,在團(tuán)隊(duì)內(nèi)部做了一個(gè)分享,希望能引起大家的思考:
關(guān)于開(kāi)發(fā)工程師成長(zhǎng)的問(wèn)題最近有一些思考,做個(gè)分享,先拋兩個(gè)觀點(diǎn):
1、 夯實(shí)技術(shù)基礎(chǔ)應(yīng)以企業(yè)(市場(chǎng))本質(zhì)需求為導(dǎo)向,技術(shù)人員的身價(jià)或者核心競(jìng)爭(zhēng)力的體現(xiàn)最終是由企業(yè)(市場(chǎng))的本質(zhì)需求決定的,這個(gè)本質(zhì)需求是能用最快的速度提供可靠的綜合解決方案,而不是看誰(shuí)的技術(shù)玩得更酷或者更新潮;
2、 技術(shù)人員對(duì)技術(shù)的把控程度,很大程度決定了一個(gè)技術(shù)人員的“身價(jià)”和“話語(yǔ)權(quán)”,在當(dāng)前千軍萬(wàn)馬的互聯(lián)網(wǎng)技術(shù)大軍里:
(1)懂得某種技術(shù)的 “HowTo”的一抓一大把,屬于金字塔的底層
(2)能再往前進(jìn)一步,深入理解這門技術(shù)“Why”的,相對(duì)來(lái)說(shuō)就要少一點(diǎn)了,屬于金字塔的第二層
(3)能對(duì)一門技術(shù)理解了以后,能對(duì)既有技術(shù)進(jìn)行優(yōu)化和改進(jìn)的,就更少了,屬于金字塔的第三層
(4)那金字塔的第四層是什么類型的人呢?我給出的定義是那些對(duì)多種技術(shù)有深入的理解,在提供綜合解決方案時(shí),面對(duì)多種技術(shù)知道如何取舍和搭配的人、能對(duì)已形成的搭配方案進(jìn)行優(yōu)化和改進(jìn)的人,這種人是企業(yè)里的“香餑餑”,形象說(shuō)明如下:

所以,要提高自身的核心競(jìng)爭(zhēng)力、提高身價(jià),第一個(gè)首先要想清楚發(fā)力點(diǎn)在哪里、成長(zhǎng)路徑是什么,對(duì)于上圖描述,大家思考和觀察一下,是不是這么個(gè)道理?
第二個(gè)要談的,是作為一名互聯(lián)網(wǎng)開(kāi)發(fā)工程師,要掌握哪些必備的關(guān)鍵技術(shù);下面羅列出來(lái)的這些技術(shù),是最近我去分析了一下各個(gè)公司對(duì)開(kāi)發(fā)成員的招聘要求、觀察淘寶一些高P所具備的知識(shí),包括自己之前做開(kāi)發(fā)工程師的一些體會(huì),總結(jié)了一下做互聯(lián)網(wǎng)開(kāi)發(fā),一些通用的、開(kāi)發(fā)工作中經(jīng)常接觸的的技術(shù)列表出來(lái),這些必備技術(shù)要盡量確保每一項(xiàng)技術(shù)掌握到上圖中金字塔的二、三層發(fā)展,不能老處在第一層,這樣沒(méi)有競(jìng)爭(zhēng)力,“了解”和“熟悉”這兩個(gè)概念差距還是蠻大的:
WebServer:
1、 Apache(nginx)
2、 Tomcat
3、 Jboss
前端技術(shù):
1、 html/css/js
2、 ajax
3、 前端框架:protype、dwr、Jquery、JfreeChart、ExtJs
Java技術(shù):
1、 Java語(yǔ)言;
2、 JVM 虛擬機(jī)
3、 J2EE技術(shù)
數(shù)據(jù)庫(kù)相關(guān)技術(shù):
1、 關(guān)系型數(shù)據(jù)庫(kù):Mysql、Oracle
2、 NoSql:Cassandra、MonGoDB
工具:
1、 IDE:Eclipse
2、 編譯打包:Maven(Ant)
3、 單元測(cè)試:Junit
4、 代碼管理:SVN(Cvs)
5、 前端調(diào)試:Httpwatch、Firebug
6、 壓力測(cè)試:ab
開(kāi)發(fā)框架:
1、 MVC框架: Struts2、Webwork、Webx、Spring
2、 ORMapping框架: Ibatis、Hibernate
集群及緩存技術(shù):
1、 DNS
2、 LVS+Keepalived
3、 Squid、MemCached
系統(tǒng)及網(wǎng)絡(luò)基礎(chǔ):
1、 Linux系統(tǒng);
2、 監(jiān)控;
3、 TCP/IP協(xié)議、HTTP協(xié)議;
“板凳做得十年冷”,做技術(shù)需要耐得住寂寞,量變到質(zhì)變,融會(huì)貫通,需要有一個(gè)過(guò)程,技術(shù)基礎(chǔ)也是一步步夯實(shí)起來(lái)的,這是個(gè)客觀規(guī)律,但是即使要坐“十年板凳”的時(shí)候,還是要規(guī)劃一下該學(xué)什么、怎么學(xué)、一步步去完善,否則會(huì)發(fā)現(xiàn)十年下來(lái),板凳坐冷了,心也冷了,那就很悲劇;