设为首页 - 加入收藏 焦作站长网 (http://www.0391zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 发布 游戏 网络
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

带你聊聊 Java 并发编程之线程基础

发布时间:2019-11-08 01:56 所属栏目:[优化] 来源:小九
导读:【线下技术沙龙】11月23日,多云时代开启企业业务新高度,安全如何与时俱进? 01、简介 百丈高楼平地起,要想学好多线程,首先还是的了解一下线程的基础,这边文章将带着大家来了解一下线程的基础知识。 02、线程的创建方式 实现 Runnable 接口 继承 Thread
【线下技术沙龙】11月23日,多云时代开启企业业务新高度,安全如何与时俱进?

?01、简介

百丈高楼平地起,要想学好多线程,首先还是的了解一下线程的基础,这边文章将带着大家来了解一下线程的基础知识。

带你聊聊 Java 并发编程之线程基础

02、线程的创建方式

  1. 实现 Runnable 接口
  2. 继承 Thread 类
  3. 实现 Callable 接口通过 FutureTask 包装器来创建线程
  4. 通过线程池创建线程

下面将用线程池和 Callable 的方式来创建线程

  1. public?class?CallableDemo?implements?Callable?{?
  2. ?
  3. ????@Override?
  4. ????public?String?call()?throws?Exception?{?
  5. ????????int?a=1;?
  6. ????????int?b=2;?
  7. ????????System.?out?.println(a+b);?
  8. ????????return?"执行结果:"+(a+b);?
  9. ????}?
  10. ?
  11. ????public?static?void?main(String[]?args)?throws?ExecutionException,?InterruptedException?{?
  12. ????????//创建一个可重用固定线程数为1的线程池?
  13. ????????ExecutorService?executorService?=?Executors.newFixedThreadPool?(1);?
  14. ????????CallableDemo?callableDemo=new?CallableDemo();?
  15. ????????//执行线程,用future来接收线程的返回值?
  16. ????????Future?future?=?executorService.submit(callableDemo);?
  17. ????????//打印线程的返回值?
  18. ????????System.?out?.println(future.get());?
  19. ????????executorService.shutdown();?
  20. ????}?
  21. }?

执行结果

  1. 3?
  2. 执行结果:3?

03、线程的生命周期

  1. NEW:初始状态,线程被构建,但是还没有调用 start 方法。
  2. RUNNABLED:运行状态,JAVA 线程把操作系统中的就绪和运行两种状态统一称为“运行中”。调用线程的 start() 方法使线程进入就绪状态。
  3. BLOCKED:阻塞状态,表示线程进入等待状态,也就是线程因为某种原因放弃了 CPU 使用权。比如访问 synchronized 关键字修饰的方法,没有获得对象锁。
  4. Waiting :等待状态,比如调用 wait() 方法。
  5. TIME_WAITING:超时等待状态,超时以后自动返回。比如调用 sleep(long millis) 方法
  6. TERMINATED:终止状态,表示当前线程执行完毕。

看下源码:

  1. public?enum?State?{?
  2. ????????NEW,?
  3. ????????RUNNABLE,?
  4. ????????BLOCKED,?
  5. ????????WAITING,?
  6. ????????TIMED_WAITING,?
  7. ????????TERMINATED;?
  8. }?

04、线程的优先级

  1. 线程的最小优先级:1
  2. 线程的最大优先级:10
  3. 线程的默认优先级:5
  4. 通过调用 getPriority() 和 setPriority(int newPriority) 方法来获得和设置线程的优先级

看下源码:

  1. /**?
  2. ?????*?The?minimum?priority?that?a?thread?can?have.?
  3. ?????*/?
  4. ????public?final?static?int?MIN_PRIORITY?=?1;?
  5. ?
  6. ????/**?
  7. ?????*?The?default?priority?that?is?assigned?to?a?thread.?
  8. ?????*/?
  9. ????public?final?static?int?NORM_PRIORITY?=?5;?
  10. ?
  11. ????/**?
  12. ?????*?The?maximum?priority?that?a?thread?can?have.?
  13. ?????*/?
  14. ????public?final?static?int?MAX_PRIORITY?=?10;?

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章