執行緒通訊的幾種方式

2022-09-12 09:39:13 字數 2633 閱讀 3822

import j**a.util.concurrent.locks.locksupport;

/** 三種執行緒協作通訊的方式:suspend/resume、wait/notify、park/unpark */

public class demo6

system.out.println("2、買到包子,回家");

});consumerthread.start();

// 3秒之後,生產乙個包子

thread.sleep(3000l);

baozidian = new object();

consumerthread.resume();

system.out.println("3、通知消費者");

}/** 死鎖的suspend/resume。 suspend並不會像wait一樣釋放鎖,故此容易寫出死鎖** */

public void suspendresumedeadlocktest() throws exception

}system.out.println("2、買到包子,回家");

});consumerthread.start();

// 3秒之後,生產乙個包子

thread.sleep(3000l);

baozidian = new object();

// 爭取到鎖以後,再恢復consumerthread

synchronized (this)

system.out.println("3、通知消費者");

}/** 導致程式永久掛起的suspend/resume */

public void suspendresumedeadlocktest2() throws exception catch (interruptedexception e)

// 這裡的掛起執行在resume後面

thread.currentthread().suspend();

}system.out.println("2、買到包子,回家");

});consumerthread.start();

// 3秒之後,生產乙個包子

thread.sleep(3000l);

baozidian = new object();

consumerthread.resume();

system.out.println("3、通知消費者");

consumerthread.join();

}/** 正常的wait/notify */

public void waitnotifytest() throws exception catch (interruptedexception e) }}

system.out.println("2、買到包子,回家");

}).start();

// 3秒之後,生產乙個包子

thread.sleep(3000l);

baozidian = new object();

synchronized (this)

}/** 會導致程式永久等待的wait/notify */

public void waitnotifydeadlocktest() throws exception catch (interruptedexception e1)

synchronized (this) catch (interruptedexception e) }}

system.out.println("2、買到包子,回家");

}).start();

// 3秒之後,生產乙個包子

thread.sleep(3000l);

baozidian = new object();

synchronized (this)

}/** 正常的park/unpark */

public void parkunparktest() throws exception

system.out.println("2、買到包子,回家");

});consumerthread.start();

// 3秒之後,生產乙個包子

thread.sleep(3000l);

baozidian = new object();

locksupport.unpark(consumerthread);

system.out.println("3、通知消費者");

}/** 死鎖的park/unpark */

public void parkunparkdeadlocktest() throws exception

}system.out.println("2、買到包子,回家");

});consumerthread.start();

// 3秒之後,生產乙個包子

thread.sleep(3000l);

baozidian = new object();

// 爭取到鎖以後,再恢復consumerthread

synchronized (this)

system.out.println("3、通知消費者");

}public static void main(string args) throws exception

}

執行緒通訊的幾種方式

public class maincatch interruptedexception ex t1 thread t2 new thread new runnable catch interruptedexception ex t2 t1.start t2.start public class re...

java 執行緒間通訊的幾種方式

1.如何讓兩個執行緒依次執行 假設有兩個執行緒,乙個執行緒a,乙個執行緒b,兩個執行緒分別依次列印 1 3 三個數字即可。package test author administrator createdate 2017 10 10 public class demo1 thread thread2...

通訊的幾種方式介紹

寫此文的目的是為了更一步加深對現代網路通訊技術的認識,勉勵和提醒自己緊跟時代的技術潮流,從使用物件上來劃分通訊方式,我把它分為企業通訊和大眾通訊,首先介紹企業通訊的幾種方式 一 企業通訊 1 語音通訊 a 模擬中繼 使用者使用交換機管理分機,使用者交換機通過多根音訊電纜與局端裝置互聯,所有分機共享這...