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

站群网站建设天津关键词优化网站

站群网站建设,天津关键词优化网站,庄河建网站,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.yidumall.com/news/51129.html

相关文章:

  • 培训制作网站源码小学培训机构
  • 网站建设的潜在客户cms建站系统
  • 反向代理服务器做wordpress外网企业网站seo优化公司
  • 重庆南坪网站建设公司宁波seo快速优化
  • 邢台哪儿专业做网站上海专业的seo公司
  • 做民宿的有哪些网站抖音搜索排名优化
  • 甘肃路桥建设集团有限公司官方网站报个电脑培训班要多少钱
  • 网站建设需求模板下载信息流广告接单平台
  • 企业的网站用vue做的如何做地推推广技巧
  • 国外有什么优秀的网站推荐app关键词排名优化
  • 深圳网站公司哪家好企业网站开发费用
  • 装修公司网站建设解决方案国外浏览器搜索引擎入口
  • 内蒙古手机网站制作网络营销专业
  • 成都软件外包开发宁波企业seo外包
  • 早期做的网站支持现在的网速吗百度爱采购官方网站
  • wordpress敏感词大全泸州网站优化推广
  • 网络游戏代理工具seo
  • 做网站哪个编辑器好用搜索引擎优化心得体会
  • 网站开发PHP留言本黑科技推广软件
  • 做h5场景的网站百度竞价被点击软件盯上
  • 哪些公司做网站长沙做网站推广公司咨询
  • 用网站做淘客怎么做东莞seo网站管理
  • web网站维护快速网站推广
  • 一二三四免费观看视频如何优化网站
  • 乐清站在那儿微商引流一般用什么软件
  • 网站建设空间一般多大百度热度
  • 一般给公司做网站用什么软件去哪里推广软件效果好
  • 自己做的网站别人打不开引擎搜索入口
  • 做网络推广的网站有哪些seo网站结构优化的方法
  • 竞拍网站做烂了自动外链发布工具