暂停线程如何正确的更好的停止一个线程

暂停线程  时间:2021-09-02  阅读:()

如何暂停主线程直到第二个线程的终止

1、在创建第二个线程时,传入一个回调函数,该函数用以通知主线程“其任务已经完成”,在该线程启动后,持续检查标志,直到标志被回调函数修改为止; 2、更简单的:在创建并启动第二个线程后,持续检查该线程的状态,直到其状态为终止为止,类似:while(Threshold2.Status == Status.Running) Sleep(20); 如果你的要求是在第二个线程执行时,主线程一直保持“暂停”(Sleep)状态的话,这个我就不清楚怎么做到了,或者是启动第二个线程时传入主线程的句柄,启动第二线程后,挂起主线程,在第二线程结束时,再恢复主线程?

怎样停止一个线程?

run() 方法执行完,线程就停止了。

等待该线程对象被回收就可以了。

如果你是要重复执行 run() 方法中的代码,可以在里面加一个 while(布尔变量) 这样的循环,其中的布尔变量使用类的私有变量,由其它事件触发,将其改变为 false ,这样在退出循环之前,循环体会完全执行,不会出现使用 () 方法时可能出现的问题,run() 方法就能圆满结束了。

求助,如何暂停子线程?

可以用Thread.yield(),但正确来说是子线程交出控制权。

所以有写成:while(isWait) Thread.yield(); //当isWait=true,保持迴圈。

关于java多线程问题 如何暂停子线程

线程不是只能在内部操作 只要有对线程实例的引用就能操作线程的,最典型就是.start方法就不是线程内部运行的啊。

public void widgetSelected(SelectionEvent e) { try{aePlayWave.wait();} catch(Exception e1){System.out.println("error");} }是对的啊 sleep ()不行因为只是暂停固定的时间 interrupt()不行是因为播放线程直接停止了。

用aePlayWave.wait(); 暂停以后 想恢复的话就用aePlayWave.notify()来唤醒休眠的线程就行了。

比如通过某个按钮事件调用aePlayWave.notify()就能恢复播放。

java暂停与恢复线程

Thread.suspend(); Thread.resume(); 之所以过时是因为其可能造成死锁。

所以现在可以用 wait和notify来代替,但这两个方法必须用在synchronize里面。

所以如果是一般场合可用循环变量来控制线程, while(flag){ dosomething().. Thread.sleep(100); } 设置flag为false则循环结束,这个线程也结束。

恢复时需要创建一个新的线程。

这是一般的游戏所采用的方法。

如何正确的更好的停止一个线程

1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。

2. 使用方法强行终止线程(这个方法不推荐使用,因为和suspend、resume一样,也可能发生不可预料的结果)。

3. 使用interrupt方法中断线程。

1. 使用退出标志终止线程 当run方法执行完后,线程就会退出。

但有时run方法是永远不会结束的。

如在服务端程序中使用线程进行监听客户端请求,或是其他的需要循环处理的任务。

在这种情况下,一般是将这些任务放在一个循环中,如while循环。

如果想让循环永远运行下去,可以使用while(true){……}来处理。

但要想使while循环在某一特定条件下退出,最直接的方法就是设一个boolean类型的标志,并通过设置这个标志为true或false来控制while循环是否退出。

下面给出了一个利用退出标志终止线程的例子。

package chapter2; public class ThreadFlag extends Thread { public volatile boolean exit = false; public void run() { while (!exit); } public static void main(String[] args) throws Exception { ThreadFlag thread = new ThreadFlag(); thread.start(); sleep(5000); // 主线程延迟5秒 thread.exit = true; // 终止线程thread thread.join(); System.out.println("线程退出!"); } } 在上面代码中定义了一个退出标志exit,当exit为true时,while循环退出,exit的默认值为false.在定义exit时,使用了一个Java关键字volatile,这个关键字的目的是使exit同步,也就是说在同一时刻只能由一个线程来修改exit的值, 2. 使用方法终止线程 使用方法可以强行终止正在运行或挂起的线程。

我们可以使用如下的代码来终止线程: (); 虽然使用上面的代码可以终止线程,但使用方法是很危险的,就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,因此,并不推荐使用方法来终止线程。

3. 使用interrupt方法终止线程 使用interrupt方法来终端线程可分为两种情况: (1)线程处于阻塞状态,如使用了sleep方法。

(2)使用while(!isInterrupted()){……}来判断线程是否被中断。

在第一种情况下使用interrupt方法,sleep方法将抛出一个InterruptedException例外,而在第二种情况下线程将直接退出。

下面的代码演示了在第一种情况下使用interrupt方法。

package chapter2; public class ThreadInterrupt extends Thread { public void run() { try { sleep(50000); // 延迟50秒 } catch (InterruptedException e) { System.out.println(e.getMessage()); } } public static void main(String[] args) throws Exception { Thread thread = new ThreadInterrupt(); thread.start(); System.out.println("在50秒之内按任意键中断线程!"); System.in.read(); thread.interrupt(); thread.join(); System.out.println("线程已经退出!"); } } 上面代码的运行结果如下: 在50秒之内按任意键中断线程! sleep interrupted 线程已经退出! 在调用interrupt方法后, sleep方法抛出异常,然后输出错误信息:sleep interrupted. 注意:在Thread类中有两个方法可以判断线程是否通过interrupt方法被终止。

一个是静态的方法interrupted(),一个是非静态的方法isInterrupted(),这两个方法的区别是interrupted用来判断当前线是否被中断,而isInterrupted可以用来判断其他线程是否被中断。

因此,while (!isInterrupted())也可以换成while (!Thread.interrupted())。

Hosteons:洛杉矶/纽约/达拉斯免费升级10Gbps端口,KVM年付21美元起

今年1月的时候Hosteons开始提供1Gbps端口KVM架构VPS,目前商家在LET发布消息,到本月30日之前,用户下单洛杉矶/纽约/达拉斯三个地区机房KVM主机可以从1Gbps免费升级到10Gbps端口,最低年付仅21美元起。Hosteons是一家成立于2018年的国外VPS主机商,主要提供VPS、Hybrid Dedicated Servers及独立服务器租用等,提供IPv4+IPv6,支持...

legionbox:美国、德国和瑞士独立服务器,E5/16GB/1Gbps月流量10TB起/$69/月起

legionbox怎么样?legionbox是一家来自于澳大利亚的主机销售商,成立时间在2014年,属于比较老牌商家。主要提供VPS和独立服务器产品,数据中心包括美国洛杉矶、瑞士、德国和俄罗斯。其中VPS采用KVM和Xen架构虚拟技术,硬盘分机械硬盘和固态硬盘,系统支持Windows。当前商家有几款大硬盘的独立服务器,可选美国、德国和瑞士机房,有兴趣的可以看一下,付款方式有PAYPAL、BTC等。...

萤光云(16元/月)高防云服务器自带50G防御

螢光云官網萤光云成立于2002年,是一家自有IDC的云厂商,主打高防云服务器产品。在国内有福州、北京、上海、台湾、香港CN2节点,还有华盛顿、河内、曼谷等海外节点。萤光云的高防云服务器自带50G防御,适合高防建站、游戏高防等业务。本次萤光云中秋云活动简单无套路,直接在原有价格上砍了一大刀,最低价格16元/月,而且有没有账户限制,新老客户都可以买,就是直接满满的诚意给大家送优惠了!官网首页:www....

暂停线程为你推荐
硬盘分区格式化怎样给硬盘分区并格式化soap是什么意思rbq是什么意思?sd卡座我是一家手机生产厂的采购员,想知道按键开关、SD卡座什么厂家生产的好啊。知道的说说。谢谢黑屏操作电脑一操作就黑屏 不操作就没有事。该怎么恢复趋势防毒趋势杀毒好用吗?趋势防毒如何破解趋势防病毒墙省份证查询如何免费查询个人身份证号码归属地及姓名fshow微波炉的用法是什么?e游我是04年买的任e游电子狗是插卡的中国移动的卡,但是缴费没有地方交营业厅都说交不了?有与着这种情况e游跟团旅游多少钱一个人
国际域名抢注 最新代理服务器地址 服务器配置技术网 美国主机评测 灵动鬼影 七夕促销 softbank邮箱 免费活动 上海服务器 支持外链的相册 无限流量 外贸空间 上海电信测速 web应用服务器 个人免费邮箱 中国联通宽带测速 免费网络空间 windowsserver2008 winserver2008下载 火山互联 更多