java 添加一个线程、创建响应的用户界面 。 演示示例代码
javajava 添加一個線程、創(chuàng)建響應的用戶界面 。
演示示例代碼
?來自thinking in java 4 21章? 部分的代碼? 夾21.2.11
thinking in java 4免費下載:http://download.csdn.net/detail/liangrui1988/7580155
package org.rui.thread.concurrent;/*** 增加一個線程* 一個線程能夠在其它線程之上調(diào)用join()方法,其效果是等待一段時間直到第二個線程結束才繼續(xù)運行。* 假設某個線程在還有一個線程T上調(diào)用t.join() 此線程將被掛起,直到目標線程t結束才恢復(即 t.isAlive()返回為假) * @author lenovo * */ class Sleeper extends Thread { private int duration; public Sleeper(String name,int sleepTime) { super(name); duration=sleepTime; start(); } /** * Sleeper 它要休眠一段時間 */ @Override public void run() { try { sleep(duration); } catch (Exception e) { //依據(jù) isInterrupted的返回值報告這個中斷,當還有一個線程在該線程上調(diào)用interrupt()時, //將給該線程設定一個標志,表明該線程已經(jīng)中斷,然而。異常被捕獲時將清理這個標志。所以在catch子句中, //在異常被捕獲的時候這個標志總是為假。除異常之外,這個標志還可有于其它情況,比方線程可能會檢查當中斷狀態(tài) System.out.println(getName()+" was interrupted."+"isInterrupted() "+ isInterrupted()); return; } System.out.println(getName()+" has awakened"); } } // class Joiner extends Thread { private Sleeper sleeper; public Joiner(String name,Sleeper sleeper) { super(name); this.sleeper=sleeper; start(); } @Override public void run() { /** * Joiner 線程將通過在sleeper對象上調(diào)用join方法來等待sleeper醒來.在main里面 * 每一個sleeper都有一個joiner,這能夠在輸出中發(fā)現(xiàn),假設sleeper被 中斷或者是正常結束。 * joiner將和sleeper一同結束 * */ try { sleeper.join(); } catch (InterruptedException e) { System.out.println("interrupted"); } System.out.println(getName()+" join completed"); } } // public class Joining { public static void main(String[] args) { //線程1 Sleeper sleepy=new Sleeper("Sleepy",1500), grumpy=new Sleeper("Grumpy",1500); // Joiner Dopey=new Joiner("Dopey",sleepy), doc=new Joiner("doc",grumpy); grumpy.interrupt(); } } /** * 注意,java SE5的java.util.concurrent類庫包括諸如CyclicBarrier這種工具。 * 它們可能比最初的線程類庫中的join更加合適 * output: Grumpywas interrupted.isInterrupted() false doc join completed Sleepy has awakened Dopey join completed */
package org.rui.thread.concurrent; /*** 創(chuàng)建有響應的用戶界面* 一個關注于運算,所以不能讀取控制臺輸入,還有一個把運算放在任務里單獨執(zhí)行,* 此時就能夠在進行運算的同一時候監(jiān)聽控制臺輸入* @author lenovo**///無反應的 class UnresponsiveUI {private volatile double d=1;public UnresponsiveUI()throws Exception{while(d>0)d=d+(Math.PI+Math.E);System.in.read();// 永遠不會在這里}}public class ResponsiveUI extends Thread {private volatile static double d=1;public ResponsiveUI(){setDaemon(true);start();}@Overridepublic void run() {//無限循環(huán),顯然程序 不可能到達讀取控制臺輸入的那一行(編譯器被欺騙了,相信while的條件使得程序能到達讀取控制臺輸入的那一行)。//假設把建立UnresponsiveUI的那一行的凝視解除掉再執(zhí)行程序,那么要終止它的話,就僅僅能殺死這個進程while(true)d=d+(Math.PI+Math.E)/d;}public static void main(String[] args) throws Exception {//4new UnresponsiveUI();// 必須殺了這個線程new ResponsiveUI();System.in.read();System.out.println(d);//顯示上傳進度/*** 要想讓程序有響應,就得把計算方案run該方法。因此,它允許處理器等程序。
* 當您按下‘進’當健康。計算確實可以看到該項目的實施為背景。同時還在等待用戶輸入。 */ } } /** input: hello output: 在基于停留時間輸出: 68130.17629894095 */
轉載于:https://www.cnblogs.com/zfyouxi/p/4841199.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的java 添加一个线程、创建响应的用户界面 。 演示示例代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构与算法 Big O 备忘录与现实
- 下一篇: C++Builder中ListView控