java 加入一个线程、创建有响应的用户界面 。 示例代码
来源:互联网 发布:p2p网络借贷法律规定 编辑:程序博客网 时间:2024/05/01 04:09
javajava 加入一个线程、创建有响应的用户界面 。 示例代码
来自thinking in java 4 21章 部分代码 目录21.2.11
thinking in java 4免费下载:http://download.csdn.net/detail/liangrui1988/7580155
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 它要休眠一段时间 */ @Overridepublic 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();}@Overridepublic 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) {//线程1Sleeper 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() falsedoc join completedSleepy has awakenedDopey 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();}@Overridepublic 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 */
1 0
- java 加入一个线程、创建有响应的用户界面 。 示例代码
- 用线程创建有响应的用户界面
- (23)21.2.12 创建有响应的用户界面
- 12.2.12 创建有响应的用户界面 捕获异常
- 建立有响应的用户界面
- java 如何创建一个有返回值的线程
- 创建一个简单的用户界面
- JAVA线程-示例代码
- java停止线程的一个示例
- 创建用户界面线程
- 多线程-----创建用户界面线程
- 创建用户界面线程
- MFC创建用户界面线程
- 创建用户界面线程
- AfxBeginThread创建用户界面线程
- MFC创建用户界面线程
- 【代码示例】 一个简单的Java死锁
- Android Training - 创建一个简单的用户界面
- cocos2dx 加减速
- android图形界面UI详解
- 全排列
- keepalived主备切换后虚拟IP漂移慢的解决方法
- cocos2dx lua 灵活使用table类
- java 加入一个线程、创建有响应的用户界面 。 示例代码
- FPGA机器学习之stanford机器学习第九堂
- 用cx_Freeze把python打包成exe可执行文件
- 通过CSS进行SEO优化
- Source Insight 项目简单使用说明
- LeetCode之Decode Ways
- Android项目自动批量打包之程序实现
- 用Java进行Web开发学习日志——1.认识J2EE
- 成功必要的性格特性