java 添加一个线程、创建响应的用户界面 。 演示示例代码
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 它要休眠一段时间 */ @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();}@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 */
转载于:https://www.cnblogs.com/zfyouxi/p/4841199.html
java 添加一个线程、创建响应的用户界面 。 演示示例代码相关推荐
- java 用户线程如何修改界面内容_java 加入一个线程、创建有响应的用户界面 。 示例代码...
javajava 加入一个线程.创建有响应的用户界面 . 示例代码 来自thinking in java 4 21章 部分代码 目录21.2.11 package org.rui.thread.con ...
- Java中一个线程只有六个状态。至于阻塞、可运行、挂起状态都是人们为了便于理解,自己加上去的。...
java中,线程的状态使用一个枚举类型来描述的.这个枚举一共有6个值: NEW(新建).RUNNABLE(运行).BLOCKED(锁池).TIMED_WAITING(定时等待).WAITING(等待) ...
- java一竖,java 添加一个竖滚动条
java 添加一个竖滚动条 关注:178 答案:2 mip版 解决时间 2021-02-04 23:38 提问者断念劫难 2021-02-04 19:48 只要一个竖的滚动条 还有它的单机事件 最 ...
- 安卓应用安全指南 4.3.1 创建/使用内容供应器 示例代码
4.3.1 创建/使用内容供应器 示例代码 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC ...
- java printwriter 文件,java使用PrintWriter写文件,javaprintwriter写,下面示例代码演示使用Pr...
java使用PrintWriter写文件,javaprintwriter写,下面示例代码演示使用Pr 下面示例代码演示使用PrintWriter方法写文件. PrintWriter的构造函数接受Fil ...
- Java四种线程创建的思路
一.哪四种 传统的是继承thread类和实现runnable接口,java5以后又有实现callable接口和java的线程池获得. callable相比于runnable,多了返回值,抛出了异常. ...
- java中一个线程最小优先数_Java线程的优先级
Java线程可以有优先级的设定,高优先级的线程比低优先级的线程有更高的几率得到执行(不完全正确,请参考下面的"线程优先级的问题"). 记住当线程的优先级没有指定时,所有线程都携带普 ...
- java new一个线程执行完后会自动销毁吗_Java基础总结,超级全的面试题
1. static关键字是什么意思?Java 中是否可以覆盖(override)一个 private 或者是 static 的方法?是否可以在 static 环境中访问非static 变量? stat ...
- java多线程之线程创建和状态
一.概述 1.上下文切换 即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现 这个机制.时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切 换线 ...
最新文章
- 《Adobe Acrobat DC经典教程》—第1章1.11节在阅读模式下查看PDF文件
- 配置oracle 11g环境,oracle 11g 的安装环境的配置
- Win10上线摸鱼神器,已经被玩疯了!
- 知道坐标matlab三维作图,已知点坐标,要求根据坐标作出三维曲面图
- 查询已有链表的hashmap_原创 | 面试不再慌,看完这篇保证让你写HashMap跟玩一样...
- 八皇后(洛谷-P1219)
- ORA-12011+ORA-06512–job执行失败问题
- 为Python终端提供持久性历史记录
- itextpdf 实现html转pdf中中文及图片base64的解决方法
- 夯实Java基础(二)——面向对象之封装
- JS实现Sql语句格式化效果
- Nexus下载安装及对接
- 大数据工程师成长之路
- 科来网络分析系统网络故障分析方法
- js 百分比计算公式,图形填充的百分比
- anaconda安装后打不开,卡在loading application
- 三态内容寻址存储器(TCAM)工作原理
- Pak散包查看器(SimpleViewPak)
- python之信用卡ATM(第五天)
- 佳明手表大数据应用_Garmin 佳明跑步手表测量的最大摄氧量数据靠谱吗?
热门文章
- mysql 字符串替换:处理历史稿件中的图片路径
- 【sprinb-boot】lib分离打包
- 圆柱属于能滚动的物体吗_一户多宅属于违建吗?怎么能拥有多一点的宅基地
- linux 页面内容输出,Node.js 一个简单的页面输出
- 重装机兵java_重装机兵之机甲咆哮
- rust怎么拆自己石墙_房屋征拆:遭遇非法强拆怎么办?如何依法维护自己的权益...
- 模型部署到移动端_TensorFlow Lite 自然语言处理模型的最新功能,助力设备端 NLP 部署...
- delphi if多个条件_屡试不爽!使用策略模式代替多个if条件语句
- 利用pickle保存模型
- GCN(一)数据集介绍