集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:15023458194  |   联系客服   |
当前位置:主页 > 培训课程 > Java >

成都java程序员工资:Java守护线程普通线程的例子

发布者: 成都达内     浏览次数:     发布时间:2020-07-07 10:46:25

成都java程序员工资:我们一般创建的线程都是普通非守护线程,守护线程是为普通线程服务的。这个说法比较抽象。...

  我们一般创建的线程都是普通非守护线程,守护线程是为普通线程服务的。这个说法比较抽象。

  具体一个很大的区别是:

  JVM中所有的线程都是守护线程的时候,JVM就可以退出了--JVM不会等待守护线程是否运行结束

  如果还有一个或以上的非守护线程则不会退出

  非守护线程例子

  public static void main(String[] args) throws Exception {

  Thread runnableThread = new Thread(new Runnable() {

  @Override

  public void run() {

  try {

  Thread.sleep(100);

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  System.out.println("in runnable demo");

  }

  });

  runnableThread.start();

  System.out.println("in main");

  Runtime.getRuntime().addShutdownHook(new Thread() {

  @Override

  public void run() {

  System.out.println("JVM Exit!");

  }

  });

  }

  执行结果

  in main

  in runnable demo

  JVM Exit!

  可以看到,以为runnableThread默认是普通非守护线程,jvm必须等待他运行结束后才会关闭。

  守护线程例子

  setDaemon为true,就把线程设置成了守护线程。

  public static void main(String[] args) throws Exception {

  Thread runnableThread = new Thread(new Runnable() {

  @Override

  public void run() {

  try {

  Thread.sleep(100);

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  System.out.println("in runnable demo");

  }

  });

  runnableThread.setDaemon(true);

  runnableThread.start();

  System.out.println("in main");

  Runtime.getRuntime().addShutdownHook(new Thread() {

  @Override

  public void run() {

  System.out.println("JVM Exit!");

  }

  });

  }

  执行结果

  in main

  JVM Exit!

  可以看到,jvm没有等待守护线程执行完毕就做了关闭。当主线程结束时,守护线程自动关闭,就免去了还要继续关闭子线程的麻烦,如:Java垃圾回收线程就是一个典型的守护线程。

  额外一个例子

  public static void main(String[] args) throws Exception {

  ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(1);

  CompletableFuture.supplyAsync(() ->

  {

  try {

  Thread.sleep(100);

  } catch (InterruptedException e) {

  e.printStackTrace();

  } finally {

  executor.shutdownNow();

  }

  System.out.println("in CompletableFutureDemo 1 ");

  return "ddd";

  }, executor);

  System.out.println("in main");

  Runtime.getRuntime().addShutdownHook(new Thread() {

  @Override

  public void run() {

  System.out.println("JVM Exit!");

  }

  });

  }

  执行结果

  in main

  in CompletableFutureDemo 1

  JVM Exit!

  删除外部传入的executor,用默认的executor

  public static void main(String[] args) throws Exception {

  // ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(1);

  CompletableFuture.supplyAsync(() ->

  {

  try {

  Thread.sleep(100);

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  System.out.println("in CompletableFutureDemo 1 ");

  return "ddd";

  });

  System.out.println("in main");

  Runtime.getRuntime().addShutdownHook(new Thread() {

  @Override

  public void run() {

  System.out.println("JVM Exit!");

  }

  });

  }

  执行结果

  in main

  JVM Exit!

  当我们移除自定义的executor后发现jvm没有等待我们的子线程运行结束就直接关闭了。

  成都java程序员工资:Java守护线程普通线程的例子

  以为默认的CompletableFuture使用的是守护线程池。

  public static CompletableFuture supplyAsync(Supplier supplier) {

  return asyncSupplyStage(asyncPool, supplier);

  }

(责任编辑:范老师)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:15023458194

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:15023458194

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:15023458194

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都市高新区奥克斯广场B座1708

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56