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 加入一个线程、创建有响应的用户界面 。 示例代码...相关推荐
- java编写两个线程,一个线程打印1-52的整数,另一个线程打印字母A-Z。打印顺序为12A34B56C….5152Z。即按照整数和字母的顺序从小到大打印,并且每打印两个整数后,打印一个字母,交替
2.编写两个线程,一个线程打印1-52的整数,另一个线程打印字母A-Z.打印顺序为12A34B56C-.5152Z.即按照整数和字母的顺序从小到大打印,并且每打印两个整数后,打印一个字母,交替循环打印 ...
- 工作中如何使用线程池的?自己如何定义一个线程池?
工作中如何使用线程池的?自己如何定义一个线程池? import java.util.concurrent.*;public class MyThreadPoolDemo {public static ...
- 设计两个个线程模拟存取款操作,其中一个线程每次随机存1~1000元钱,另外一个线程取1-1000元钱,如果余额不足,则取款失败,提示余额不足。写出程序(考虑并发问题)。
设计两个个线程模拟存取款操作,其中一个线程每次随机存1~1000元钱, 另外一个线程取1-1000元钱,如果余额不足,则取款失败,提示余额不足. 写出程序(考虑并发问题). import java.u ...
- 用三个线程实现生产者消费者模型,其中一个线程作为生产者,二个线程作为消费者,生产者随机生产一个时间戳或者字符串,消费者消费这个时间戳,并不能重复消费,并将其打印出来
题目要求: 用三个线程实现生产者消费者模型,其中一个线程作为生产者,二个线程作为消费者,生产者随机生产一个时间戳或者字符串,消费者消费这个时间戳,并不能重复消费,并将其打印出来.(这是一道百度面试的算 ...
- 关于PrintQueueCollection()类,跨线程调用错误“线程无法访问此对象,因为另一个线程拥有该对象”
使用System.Printing.PrintQueueCollection() 纸质打印机获取 _generalPrinters = new PrintQueueCollection(); pu ...
- java读取修改文件内容_Java对本地文件内容读取、修改、删除的操作
import org.apache.commons.lang.StringUtils; import java.io.*; import java.util.HashMap; import java. ...
- java线程和进程的区别_Java中的线程和进程比较
1.进程和线程的区别 通俗一点说,进程就是程序的一次执行,而线程可以理解为进程中的执行的一段程序片段. 用一点文词说就是,每个进程都有独立的代码和数据空间(进程上下文);而线程可以看成是轻量级的进程. ...
- java怎样中断函数_Java中断一个线程操作示例
本文实例讲述了Java中断一个线程操作.分享给大家供大家参考,具体如下: 一 点睛 中断一个线程,意味着该线程在完成任务之前,停止它正在进行的一切当前的操作. 有三个比较常用的函数: interrup ...
- java中怎么让一个数倒转_java 输入一个数字,反转输出这个数字的值(实现方法)
java 输入一个数字,反转输出这个数字的值(实现方法) 如下所示: package 第四天; import java.util.Scanner; public class 数字反转 { public ...
最新文章
- August 14, 2009 - Choice
- java搜索文件夹中文件是否存在_java中判断文件文件夹是否存在的方法(附代码)...
- MySQL-MHA搭建
- 设置tomcat使用指定的jdk版本
- Android6.0------权限申请管理(单个权限和多个权限申请)
- 进入正在运行的Docker容器的4种方式
- JAVA如何才能导出这样的EXCEL?
- python高阶函数、map reduce 自己如何去定义_小猿圈python之高阶函数lambda、map和reduce用法...
- 一维数组kmeans聚类c语言,一维数组的 K-Means 聚类算法理解
- 去除Android 6.0 界面下的导航栏:NavigationBar
- VCLSkin皮肤在MDI窗体下的问题
- ini更改文件夹图标
- 泰坦尼克号预测python_泰坦尼克号生存预测(python)
- 分别用Java应用程序和Applet程序实现星星三角形图案的绘制
- 产业互联网周报 | 上海数交所:数据产品交易额预计全年超过1亿元;Zoom单季度净利润同比下降86%;...
- 电信诈骗瞄准“徐玉玉”们,扣问网络安全教育短板
- java实现文本纠错功能_调用百度API进行文本纠错
- ctrl键频繁失灵,但不是键盘本身的问题,换个键盘同样失灵
- 网页打开手机连接到服务器失败,手机服务器无法连接到服务器失败
- 2023安徽工程大学计算机考研信息汇总