日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 用户线程如何修改界面内容_java 加入一个线程、创建有响应的用户界面 。 示例代码...

發(fā)布時(shí)間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 用户线程如何修改界面内容_java 加入一个线程、创建有响应的用户界面 。 示例代码... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

javajava 加入一個(gè)線程、創(chuàng)建有響應(yīng)的用戶界面 。 示例代碼

來自thinking in java 4 21章 部分代碼 目錄21.2.11

package org.rui.thread.concurrent;

/**

* 加入一個(gè)線程

* 一個(gè)線程可以在其他線程之上調(diào)用join()方法,其效果是等待一段時(shí)間直到第二個(gè)線程結(jié)束才繼續(xù)執(zhí)行。

* 如果某個(gè)線程在另一個(gè)線程T上調(diào)用t.join() 此線程將被掛起,直到目標(biāo)線程t結(jié)束才恢復(fù)(即 t.isAlive()返回為假)

* @author lenovo

*

*/

class Sleeper extends Thread

{

private int duration;

public Sleeper(String name,int sleepTime)

{

super(name);

duration=sleepTime;

start();

}

/**

* Sleeper 它要休眠一段時(shí)間

*/

@Override

public void run() {

try {

sleep(duration);

} catch (Exception e) {

//根據(jù) isInterrupted的返回值報(bào)告這個(gè)中斷,當(dāng)另一個(gè)線程在該線程上調(diào)用interrupt()時(shí),

//將給該線程設(shè)定一個(gè)標(biāo)志,表明該線程已經(jīng)中斷,然而,異常被捕獲時(shí)將清理這個(gè)標(biāo)志,所以在catch子句中,

//在異常被捕獲的時(shí)候這個(gè)標(biāo)志總是為假。除異常之外,這個(gè)標(biāo)志還可有于其他情況,比如線程可能會(huì)檢查其中斷狀態(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對(duì)象上調(diào)用join方法來等待sleeper醒來.在main里面

* 每個(gè)sleeper都有一個(gè)joiner,這可以在輸出中發(fā)現(xiàn),如果sleeper被 中斷或者是正常結(jié)束,

* joiner將和sleeper一同結(jié)束

*

*/

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)建有響應(yīng)的用戶界面

* 一個(gè)關(guān)注于運(yùn)算,所以不能讀取控制臺(tái)輸入,另一個(gè)把運(yùn)算放在任務(wù)里單獨(dú)運(yùn)行,

* 此時(shí)就可以在進(jìn)行運(yùn)算的同時(shí)監(jiān)聽控制臺(tái)輸入

* @author lenovo

*

*/

//無反應(yīng)的

class UnresponsiveUI

{

private volatile double d=1;

public UnresponsiveUI()throws Exception

{

while(d>0)

d=d+(Math.PI+Math.E);

System.in.read();// 永遠(yuǎn)不會(huì)在這里

}

}

public class ResponsiveUI extends Thread {

private volatile static double d=1;

public ResponsiveUI()

{

setDaemon(true);

start();

}

@Override

public void run() {

//無限循環(huán),顯然程序 不可能到達(dá)讀取控制臺(tái)輸入的那一行(編譯器被欺騙了,相信while的條件使得程序能到達(dá)讀取控制臺(tái)輸入的那一行)。

//如果把建立UnresponsiveUI的那一行的注釋解除掉再運(yùn)行程序,那么要終止它的話,就只能殺死這個(gè)進(jìn)程

while(true)

d=d+(Math.PI+Math.E)/d;

}

public static void main(String[] args) throws Exception {

//4new UnresponsiveUI();// 必須殺了這個(gè)線程

new ResponsiveUI();

System.in.read();

System.out.println(d);//顯示上傳進(jìn)度

/**

* 要想讓程序有響應(yīng),就得把計(jì)算程序放在run方法中,這樣它就能讓出處理器給別的程序。

* 當(dāng)你按下‘回車’健的時(shí)候,可以看到計(jì)算確實(shí)在作為后臺(tái)程序運(yùn)行,同時(shí)還在等待用戶輸入。

*/

}

}

/**

input:

hello

output: 根據(jù)停留時(shí)間輸出:

68130.17629894095

*/

總結(jié)

以上是生活随笔為你收集整理的java 用户线程如何修改界面内容_java 加入一个线程、创建有响应的用户界面 。 示例代码...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。