当前位置: 首页 > news >正文

吉安工商注册官方网站教做鞋的网站

吉安工商注册官方网站,教做鞋的网站,手机上做网站php,wordpress花园主题线程的中断 1.应用场景: 假设从网络下载一个100M的文件,如果网速很慢,用户等得不耐烦,就可能在下载过程中点“取消”,这时,程序就需要中断下载线程的执行。 2.常用中断线程的方法: 1.使用标…

线程的中断

1.应用场景:

假设从网络下载一个100M的文件,如果网速很慢,用户等得不耐烦,就可能在下载过程中点“取消”,这时,程序就需要中断下载线程的执行。

2.常用中断线程的方法:

1.使用标志位

2.interrupt()

1)如果当前线程sleep,wait或因为其他线程使用join()而陷入阻塞状态,那么当在其他线程中调用了该线程的interrupt()方法时,join()等方法会立刻抛出InterruptedException异常,目标线程只要捕获到该异常,会立刻结束运行
(2interrupt()不能中断I/O阻塞和synchronized锁阻塞
关于重置中断标志位:
isInterrupted()---不清除中断标志位,当前线程 public boolean isInterrupted() {//实例方法,不会重置标志位return isInterrupted(false);}
interrupted()-----清除中断标志位,又变成false,调用该方法的当前线程对象public static boolean interrupted() {//静态方法,会重置标志位return currentThread().isInterrupted(true);}

3.代码

3.1自己设置中断标志位

 class MyThreadTest extends Thread{
public  volatile boolean flag=true;
@Override
public void run() {//1.标志位
while(flag){System.out.println(Thread.currentThread().getName()+"是否中断---"+Thread.currentThread().isInterrupted()+"------"+Thread.currentThread().getState());
}
System.out.println("-----触发中断标志,中断了---");
}//测试的代码@Test
public void test1() throws InterruptedException {MyThreadTest t = new MyThreadTest("线程1");t.start();Thread.sleep(1);t.flag = false;
}

3.2调用 interrupt()

interrupted()

自定义线程测试
 class MyThread2 extends Thread {
@Override
public void run() {while (!isInterrupted()) {System.out.println(Thread.currentThread().getName() + "是否中断---" +Thread.interrupted() +"------" +Thread.currentThread().getState());}System.out.println(Thread.currentThread().getName() + " end "+Thread.interrupted());System.out.println(Thread.currentThread().getName() + " end "+Thread.interrupted());}}//测试的代码@Test
public void test2() throws InterruptedException {MyThread2 t2=new MyThread2();t2.start();Thread.sleep(1);t2.interrupt();
}

直接在主线程测试

public static void main(String[] args) throws InterruptedException {Thread.currentThread().interrupt();
System.out.println(Thread.interrupted());
System.out.println(Thread.interrupted());
}
}

isInterrupted()

自定义线程类

class MyThread3 extends Thread {@Overridepublic void run() {while (!isInterrupted()) {System.out.println(Thread.currentThread().getName() + "是否中断---" +Thread.currentThread().isInterrupted() +"------" +Thread.currentThread().getState());}System.out.println(Thread.currentThread().getName()+" end "+Thread.currentThread().isInterrupted());System.out.println(Thread.currentThread().getName()+" end "+Thread.currentThread().isInterrupted());}
}@Test
public void test3() throws InterruptedException {MyThread3 t3=new MyThread3();t3.start();Thread.sleep(1);t3.interrupt();
}

在主线程中测试

public static void main(String[] args) throws InterruptedException {Thread.currentThread().interrupt();System.out.println(Thread.currentThread().isInterrupted());System.out.println(Thread.currentThread().isInterrupted());
}
}

4.总结比较:

1.最好使用isInterrupted()方法进行中断标志的判断,因为不会重置标志位
2.对目标线程调用interrupt()方法可以请求中断一个线程,目标线程通过检测isInterrupted()标志获取自身是否已中断。
如果目标线程处于等待状态,该线程会捕获到InterruptedException;

3.目标线程检测到isInterrupted()为true或者捕获了InterruptedException都应该立刻结束自身线程;

4.通过标志位判断需要正确使用volatile关键字;

volatile关键字解决了共享变量在线程间的可见性问题。

http://www.yayakq.cn/news/37473/

相关文章:

  • 外贸型网站该如何推广网站建设招标信息
  • 营销型网站建设哪里济南兴田德润优惠吗小小视频在线观看免费播放
  • 阿里云服务器网站建设做广告联盟怎么做网站
  • 贵阳建网站公司电脑优化设置
  • html网站尺寸自己做的网站字体变成方框
  • vscode 网站开发制作我的第一个网页
  • 青岛网站建设培训合肥知名网页制作公司
  • 个人网站建设的步骤网站建设轮播图
  • 电商网站如何做seo哪家网站制作 优帮云
  • 那家公司做网站wordpress 自定义php
  • 有什么做C语言的网站网站推广经验杂谈
  • 英文网站建站模板电脑传奇游戏哪个好玩
  • 指定网站长期建设 运营计划在网站建设工作会上的讲话
  • 济南正规做网站公司wordpress使用文档
  • 荆州网站建设兼职做兼职什么网站比较好
  • 免费的黄冈网站有哪些平台游戏软件株洲seo
  • 个人网站开发报告营销技巧培训课程
  • 上海域名网站吗vivo手机为什么建设网站
  • vs做的本地网站企业网站怎么做中英文切换
  • 什么是网站和网页需要优化的网站有哪些?
  • 不备案的网站能上去吗珠海网站设计培训学校
  • 英国做暧小视频网站在线购物网站功能模块
  • 四川集团网站建设购物网站建设和使用
  • 河南建设银行官方网站重庆最新数据消息
  • 创立网站做电商全国工商信息查询
  • 如何建立自己的网站平台试用网站如何做
  • 建站宝盒购买免费网站建设推销
  • pc 手机网站源码重庆网站建设优化排名
  • 选择佛山顺德网站设计腾讯企业邮箱网页版登录入口
  • 做cps的网络文学网站成都网站建设软件