欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/3/15 编程问答 11 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java 用户线程如何修改界面内容_java 加入一个线程、创建有响应的用户界面 。 示例代码... 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

javajava 加入一个线程、创建有响应的用户界面 。 示例代码

来自thinking in java 4 21章 部分代码 目录21.2.11

package org.rui.thread.concurrent;

/**

* 加入一个线程

* 一个线程可以在其他线程之上调用join()方法,其效果是等待一段时间直到第二个线程结束才继续执行。

* 如果某个线程在另一个线程T上调用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) {

//根据 isInterrupted的返回值报告这个中断,当另一个线程在该线程上调用interrupt()时,

//将给该线程设定一个标志,表明该线程已经中断,然而,异常被捕获时将清理这个标志,所以在catch子句中,

//在异常被捕获的时候这个标志总是为假。除异常之外,这个标志还可有于其他情况,比如线程可能会检查其中断状态

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对象上调用join方法来等待sleeper醒来.在main里面

* 每个sleeper都有一个joiner,这可以在输出中发现,如果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;

/**

* 创建有响应的用户界面

* 一个关注于运算,所以不能读取控制台输入,另一个把运算放在任务里单独运行,

* 此时就可以在进行运算的同时监听控制台输入

* @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();

}

@Override

public void run() {

//无限循环,显然程序 不可能到达读取控制台输入的那一行(编译器被欺骗了,相信while的条件使得程序能到达读取控制台输入的那一行)。

//如果把建立UnresponsiveUI的那一行的注释解除掉再运行程序,那么要终止它的话,就只能杀死这个进程

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

*/

总结

以上是生活随笔为你收集整理的java 用户线程如何修改界面内容_java 加入一个线程、创建有响应的用户界面 。 示例代码...的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。