第七讲多线程(编辑修改稿)内容摘要:
private boolean timeToQuit = false; public void run() { while( !timeToQuit ) {…} } public void stopRunning() { timeToQuit = true。 } } 线程的生命周期及控制 public class ControlThread { private Xyz r = new Xyz()。 private Thread t = new Thread(r)。 public void startThread() { ()。 } publi void stopThread() { ()。 } } 线程的生命周期及控制 isAlive()方法: 可以用来判断线程目前是否正在执行中。 如果线程已被启动并且未被终止,那么 isAlive( )返回 true,但该线程是可运行或是不可运行的,是不能作进一步的分辨。 如果返回 false,则该线程是新创建或是已被终止的(同样不能作进一步的分辨)。 join()方法: 等待线程执行完毕。 yield()方法: 将执行的权力交给其它优先级相同的线程,当前执行线程到可运行线程队列( ready)的最后等待,若队列空,该方法无效。 myThread thd = new MyThread()。 ()。 … ()。 //等待线程 thd执行完后再继续往下执行 … join(int time):最多等待 time所指定的时间。 sleep()方法可以暂停线程的执行,让其它线程得到机会。 但 sleep()要丢出例外 InterruptedException ,必须抓住。 try { sleep(100) }catch(InterruptedException e){ …// 本例外可不作处理 } suspend()方法和 resume()可以用来暂停线程或恢复线程。 可以由线程自身在线程体中调用 suspend()方法暂停自己,也可以在其他线程中通过线程实例调用 suspend()方法暂停线程的执行。 但是要恢复由 suspend()方法暂停的线程,只能在其他线程中通过线程实例调用 resume()方法。 线程的生命周期及控制 Java提供一个线程调度器来监控程序中启动后进入可运行状态的所有线程。 线程调度器按照线程的 优先级 决定调度哪些线程来执行,具有高优先级的线程会在较低优先级的线程之前得到执行。 同时线程的调度是 抢先式 的,即如果当前线程在执行过程中,一个具有更高优先级的线程进入可执行状态,则该告优先级的线程会被立即调度执行。 多个线程运行时,若线程的优先级相同,由操作系统按时间片轮转 方式或 独占方式 来分配线程的执行时间。 线程的优先级及调度 在 Java中线程的优先级是用数字来表示的,分为三个级别: 低优先级: ,数值为 1 (2~4) 缺省优先级: Thread. NORM_PRIORITY,数值为 5 高优先级: ,数值为 10 (6~9) 具有相同优先级的多个线程,若它们都为高优先级,则每个线程都是独占式的,也就是说这些线程将被顺序执行;若该优先级不为高优先级,则这些线程将同时执行,也就是说这些线程的执行是无序的。 线程被创建后,其缺省的优先级是缺省优先级 Thread. NORM_PRIORITY。 可以用方法 int getPriority()来获得线程的优先级,同时也可以用方法 void setPriority( int p ) 在线程被创建后改变线程的优先级。 线程的优先级及调度 线程的优先级及调度 线程离开执行状态, 如果: 线程结束 线程处于 I/O等待 线程调用 sleep 线程调用 wait 线程调用 join 线程调用 yield 有更高优先级的线程 时间片用完 Priority 10 Priority 9 Priority 8 Priority 7 Priority 6 Priority 5 Priority 4 Priority 3 Priority 2 Priority 1 A B C D E F G H I J K 1. 用管道流实现线程间的通信 线程 1 PipedOutputStream PipedInputStream 输出流 outStream 输入流 inStream 线程 2 2. 通过一个中间类在线程间传递信息 线程 2 线程 1 中间类 m s s (s) s=() write() read() 多线程的互斥与同步 —— 线程间的通信 管道流可以连接两个线程间的通信。 下面的例子里有两个线程在运行,一个写线程往管道流中输出信息,一个读线程从管道流中读入信息。 多线程的互斥与同步 —— 线程间的通信 主类 Pipethread 辅类myWriter 线 程 类 辅类 myReader 线 程 类 管 道 流 将数据写到输出流 从输入流中读数据 输出流作为参数 传给 myWriter 输入流作为参数 传给 myReader class myWriter extends Thread { private PipedOutputStream outStream。 //将数据输出 private String messages[] = { Monday, Tuesday , Wednsday, Thursday,Friday, Saturday, Sunday }。 public myWriter(PipedOutputStream o) { outStream = o。 } public void run() { PrintStream p = new PrintStream( outStream )。 for( int i = 0。 i。 i++) { ( messages[i] )。 ()。 (Write: + messages[i] )。 } ()。 p = null。 } } class myReader extends Thread { private PipedInputStream inStream。 //从中读数据 public myReader(PipedInputStream i) { inStream = i。 } public void run() { String line。 DataInputStream d。 boolean reading = true。 d = new DataInputStream( inStream )。 while( reading amp。 amp。 d != null) { try{ line = ()。 if( line != null ) ( ”Read: + line )。 else reading = false。 }catch( IOException e){} } try{ ().sleep( 4000 )。 }catch( InterruptedException e ){} } } public class Pipethread { public static void main(String args[])。第七讲多线程(编辑修改稿)
相关推荐
不再执行 , 直接进行输出处理。 在程序调试过程中 , 按段插入 END指令 , 可以顺序扩大对各程序段动作的检查。 采用 END指令将程序划分为若干段 , 在确认处于前面电路块的动作正确无误之后 , 依次删去 END指令。 要注意的是在执行 END指令时 , 也刷新监视时钟。 案例二 现代工业生产广泛采用流水作业,对成品或半成品进行分检,排除残次品是必须的工序。 在流水线上
素材。 通过数码照相机获取的数字图像通称放在相机存储卡内,再通过数据线将其输入到计算机中使用。 数码相机已经基本上可以取代普通胶片式相机,而且数码相机具有着普通胶片相机所没有的优点: 即拍即看 后期投入成本较低 冲印方便 、利用扫描仪将图片转换为数字图像 我们可以利用扫描仪将照片、杂志彩页等素材转成数字图像。 将要扫描的内容放在扫描仪内,扫描仪会提供光源照亮图片
劝导力(自律) 出谋划策 怎么做才能杜绝此类事件的发生。 注意。 答: 一、法律。 二、道德。 完善法律法规,加大惩治力度。 国家:建立和完善社会主义 思想道德体系。 公民:提高公民思想道德素 质。 以德治国的含义 指导思想: 以马克思列宁主义、毛泽东思想、邓小平理论和“三个代表”重要思想为指导
由两向量夹角余弦公式可知,这两条直线的夹角 满足 例 3 已知直线 ,1 11 13 2: ,1 14 11 2: 21 zyxLzyxL判定 L1与 L2的关系 . 解 由于 L1与 L2的方向向量分别为 s1=(1,–4,1), s2=(3,1,1).因此 L1, L2的夹角 满足 222222212121212121co
2. 带电器件放电模型 (CDM) 带电器件通过引脚对地放电引起失效时,可用此模型 (引脚间电势差也损伤 ) 半导体器件对静电放电的敏感度 (2020B版 GJB548)— 由 器件结构、输入端静电保护电路的形式、版图设计和制造工艺所决定。 ESDS分级 静电敏感元器件的标志符号 外壳或包装上: 1级: 2级: 3级:无
– 浸种法 – 施入法 – 涂抹法 – 注射法 – 在示踪研究的植株上采取种子或枝条等。 适宜剂量和剂量率的选择 • 概念 ◎ 适宜剂量 ◎ 致死剂量: ◎ 半致死剂量: • 剂量的选择原则: ◎ 活:后代要有一定的成活植株 ◎ 变:在一定的成活植株中,有较大的变异效应 ◎ 优:产生的变异有较多的有利突变。 辐射育种的程序 • 处理材料的选择 • 突变世代的划分 • 分离世代群体数量的估计 •