加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

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

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

 01、简介

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

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

02、线程的创建方式

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

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

  1. public class CallableDemo implements Callable<String> { 
  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<String> future = executorService.submit(callableDemo); 
  17.         //打印线程的返回值 
  18.         System. out .println(future.get()); 
  19.         executorService.shutdown(); 
  20.     } 

执行结果

  1. 执行结果: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; 

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; 

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读