我曾聽他的Java編程視頻教程,JavaScript編程視頻教程,從中獲得不少啓發。他的課程Java開發郵件客戶端端項目,JavaAPI等,他的書籍有不少是關於Java,他勤於好學,對黑客編程,測試都精通,號稱王牌培訓員,他的教學圖片:java
如他用Java編寫不死機的程序,代碼以下:程序員
jdk版本: java version "1.6.0_10-rc2" Java(TM) SE Runtime Environment (build 1.6.0_10-rc2-b32) Java HotSpot(TM) Client VM (build 11.0-b15, mixed mode, sharing) */ /*類名:ThreadTest * 類型:public * 方法:main() 用來生成四個新線程 * 成員數據:無 */ public class ThreadTest { public static void main(String[] argv) { ThreadR tt = new ThreadR(); new Thread(tt).start(); new Thread(tt).start(); new Thread(tt).start(); new Thread(tt).start(); } } /*類名:ThreadR * 類型:接口Runnable的實現類 * 方法:run() * 成員數據:ticket 整形 */ class ThreadR implements Runnable { static int ticket=1000; public void run() { while(true) { if(ticket >0) { System.out.println(/*"TestThread run:"*/Thread.currentThread().getName()+"salling:"+ticket--); } } } }
其實我知道怎麼解決,只是這種狀況太恐怖了 public class thread { public static void main(String[] argv) { TestThread tt = new TestThread(); new Thread(tt).start(); try{Thread.sleep(10);}catch(Exception e){} tt.str = new String("method"); new Thread(tt).start(); new Thread(tt).start(); new Thread(tt).start(); } } class TestThread implements Runnable { static int ticket=1000; boolean active=true; String str = new String(""); public void run() { while(active) { if(str.equals("method")) { while(active) { sale(); } } } } public synchronized void sale() { if(ticket >0) { //synchronized(str){} System.out.print("sale()"); System.out.println(/*"TestThread run:"*/Thread.currentThread().getName()+"salling:"+ticket--); } else { active=false; try{Thread.sleep(10);}catch(Exception e){} } } }
修改Java代碼,使程序不死機 :編程
class ThreadR implements Runnable { static int ticket = 20; public void run() { while (true) { try { if (ticket > 0) { System.out.println(/* "TestThread run:" */Thread .currentThread().getName() + "salling:" + ticket--); Thread.sleep(1000); } else{ System.exit(0); } } catch (InterruptedException e) { e.printStackTrace(); } } } }
你的while(true)死循環,沒跳出。並且當一個線程佔用資源的時候,你要給其餘的線程訪問資源的機會,因此用 Thread.sleep(1000);。
還有他講的java.concurrent線程併發的課程,我曾作過筆記,以下:小程序
java.util.concurrent併發庫是JDK1.5新提供的,在JDK1.5以前,Java中要進行業務併發時,一般須要有程序員獨立完成代碼實現,而當針對高質量Java多線程併發程序設計時,爲防止死蹦等現象的出現,好比使用java以前的wait()、notify()和synchronized等,往往須要考慮性能、死鎖、公平性、資源管理以及如何避免線程安全性方面帶來的危害等諸多因素,每每會採用一些較爲複雜的安全策略,加劇了程序員的開發負擔.萬幸的是,在JDK1.5出現以後,Sun大神(Doug Lea)終於爲咱們這些可憐的小程序員推出了java.util.concurrent工具包以簡化併發完成。開發者們藉助於此,將有效的減小競爭條件(race conditions)和死鎖線程。concurrent包很好的解決了這些問題,爲咱們提供了更實用的併發程序模型。數組
java.util.concurrent包分紅了三個部分,分別是java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.lock。內容涵蓋了併發集合類、線程池機制、同步互斥機制、線程安全的變量更新工具類、鎖等等經常使用工具。 安全
java.util.concurrent包:多線程
接口摘要 | |
---|---|
BlockingDeque<E> | 支持兩個附加操做的 Queue,這兩個操做是:獲取元素時等待雙端隊列變爲非空;存儲元素時等待雙端隊列中的空間變得可用。 |
BlockingQueue<E> | 支持兩個附加操做的 Queue,這兩個操做是:獲取元素時等待隊列變爲非空,以及存儲元素時等待空間變得可用。 |
Callable<V> | 返回結果而且可能拋出異常的任務。 |
CompletionService<V> | 將生產新的異步任務與使用已完成任務的結果分離開來的服務。 |
ConcurrentMap<K,V> | 提供其餘原子 putIfAbsent、remove、replace 方法的 Map。 |
ConcurrentNavigableMap<K,V> | 支持 NavigableMap 操做,且以遞歸方式支持其可導航子映射的ConcurrentMap。 |
Delayed | 一種混合風格的接口,用來標記那些應該在給定延遲時間以後執行的對象。 |
Executor | 執行已提交的 Runnable 任務的對象。 |
ExecutorService | Executor 提供了管理終止的方法,以及可爲跟蹤一個或多個異步任務執行情況而生成 Future 的方法。 |
Future<V> | Future 表示異步計算的結果。 |
RejectedExecutionHandler | 沒法由 ThreadPoolExecutor 執行的任務的處理程序。 |
RunnableFuture<V> | 做爲 Runnable 的 Future。 |
RunnableScheduledFuture<V> | 做爲 Runnable 的 ScheduledFuture。 |
ScheduledExecutorService | 一個 ExecutorService,可安排在給定的延遲後運行或按期執行的命令。 |
ScheduledFuture<V> | 一個延遲的、結果可接受的操做,可將其取消。 |
ThreadFactory | 根據須要建立新線程的對象。 |
枚舉摘要 | |
---|---|
TimeUnit | TimeUnit 表示給定單元粒度的時間段,它提供在這些單元中進行跨單元轉換和執行計時及延遲操做的實用工具方法。 |
java.util.concurrent.lock包:併發
接口摘要 | |
---|---|
Condition | Condition 將 Object 監視器方法(wait、notify 和 notifyAll)分解成大相徑庭的對象,以便經過將這些對象與任意 Lock 實現組合使用,爲每一個對象提供多個等待 set(wait-set)。 |
Lock | Lock 實現提供了比使用 synchronized 方法和語句可得到的更普遍的鎖定操做。 |
ReadWriteLock | ReadWriteLock 維護了一對相關的鎖,一個用於只讀操做,另外一個用於寫入操做。 |
類摘要 | |
---|---|
AbstractOwnableSynchronizer | 能夠由線程以獨佔方式擁有的同步器。 |
AbstractQueuedLongSynchronizer | 以 long 形式維護同步狀態的一個 AbstractQueuedSynchronizer 版本。 |
AbstractQueuedSynchronizer | 爲實現依賴於先進先出 (FIFO) 等待隊列的阻塞鎖和相關同步器(信號量、事件,等等)提供一個框架。 |
LockSupport | 用來建立鎖和其餘同步類的基本線程阻塞原語。 |
ReentrantLock | 一個可重入的互斥鎖 Lock,它具備與使用 synchronized 方法和語句所訪問的隱式監視器鎖相同的一些基本行爲和語義,但功能更強大。 |
ReentrantReadWriteLock | 支持與 ReentrantLock 相似語義的 ReadWriteLock 實現。 |
ReentrantReadWriteLock.ReadLock | ReentrantReadWriteLock.readLock() 方法返回的鎖。 |
ReentrantReadWriteLock.WriteLock | ReentrantReadWriteLock.writeLock() 方法返回的鎖。 |
java.util.concurrent.atomic包:框架
類摘要 | |
---|---|
AtomicBoolean | 能夠用原子方式更新的 boolean 值。 |
AtomicInteger | 能夠用原子方式更新的 int 值。 |
AtomicIntegerArray | 能夠用原子方式更新其元素的 int 數組。 |
AtomicIntegerFieldUpdater<T> | 基於反射的實用工具,能夠對指定類的指定 volatile int 字段進行原子更新。 |
AtomicLong | 能夠用原子方式更新的 long 值。 |
AtomicLongArray | 能夠用原子方式更新其元素的 long 數組。 |
AtomicLongFieldUpdater<T> | 基於反射的實用工具,能夠對指定類的指定 volatile long 字段進行原子更新。 |
AtomicMarkableReference<V> | AtomicMarkableReference 維護帶有標記位的對象引用,能夠原子方式對其進行更新。 |
AtomicReference<V> | 能夠用原子方式更新的對象引用。 |
AtomicReferenceArray<E> | 能夠用原子方式更新其元素的對象引用數組。 |
AtomicReferenceFieldUpdater<T,V> | 基於反射的實用工具,能夠對指定類的指定 volatile 字段進行原子更新。 |
AtomicStampedReference<V> | AtomicStampedReference 維護帶有整數「標誌」的對象引用,能夠用原子方式對其進行更新。 |
至今記憶尤新。。。。。。。他講的Java課,太詳細,太敬業,光記代碼,我有一本很厚的代碼筆記。其餘講師講的Java課,不很詳細。異步
光靠聰明還不行,沒有勤奮是不行的,畢竟天道酬勤
惋惜英年早逝???
張孝祥老師是一個很是好的老師,他的授課視頻曾經給予過我莫大的幫助。
首先我要指出的是,他不是傳統意義的‘碼農’,教育這個領域我認爲和純粹的技術開發仍是有區別的。
心臟病猝死自從我進入互聯網行業以來,經歷得已然太多了。身邊的朋友,同事,其餘公司的朋友。
程序員這個工種不能否認是互聯網中壓力,消耗最大的一個職業。
碼農真的很辛苦 加班熬夜是常事 聽說如今都不叫碼農了 改叫碼畜。身體垮了一切都是浮雲
我以爲如張孝祥、喬布斯這些事業成功人士他們天天的事務比較多,精神也長期處於高度緊張的狀態,這也是致使他們身體情況降低的主要因素。
英國諺語:「good message,bad message?"
獲取高額利益,代價倒是death。喜憂參半。
青春賺到錢卻換不來青春。
人生很矛盾?
代碼記錄一籮筐
如何預防:
除了敲擊電腦代碼外,最好作戶外運動,用來保護眼睛疲勞,運動:光
鍛鍊身體是必要的,it行業屬於腦力活動,容易腦衰,每每作了軟件項目後,全身冰冷。
總之身體第一,賺錢纔是第二位的。
願他在天堂安息吧 阿門
my advice