【线下技术沙龙】11月23日,多云时代开启企业业务新高度,安全如何与时俱进?
01、简介
百丈高楼平地起,要想学好多线程,首先还是的了解一下线程的基础,这边文章将带着大家来了解一下线程的基础知识。
02、线程的创建方式
- 实现 Runnable 接口
- 继承 Thread 类
- 实现 Callable 接口通过 FutureTask 包装器来创建线程
- 通过线程池创建线程
下面将用线程池和 Callable 的方式来创建线程
- public class CallableDemo implements Callable<String> {
-
- @Override
- public String call() throws Exception {
- int a=1;
- int b=2;
- System. out .println(a+b);
- return "执行结果:"+(a+b);
- }
-
- public static void main(String[] args) throws ExecutionException, InterruptedException {
- //创建一个可重用固定线程数为1的线程池
- ExecutorService executorService = Executors.newFixedThreadPool (1);
- CallableDemo callableDemo=new CallableDemo();
- //执行线程,用future来接收线程的返回值
- Future<String> future = executorService.submit(callableDemo);
- //打印线程的返回值
- System. out .println(future.get());
- executorService.shutdown();
- }
- }
执行结果
- 3
- 执行结果:3
03、线程的生命周期
- NEW:初始状态,线程被构建,但是还没有调用 start 方法。
- RUNNABLED:运行状态,JAVA 线程把操作系统中的就绪和运行两种状态统一称为“运行中”。调用线程的 start() 方法使线程进入就绪状态。
- BLOCKED:阻塞状态,表示线程进入等待状态,也就是线程因为某种原因放弃了 CPU 使用权。比如访问 synchronized 关键字修饰的方法,没有获得对象锁。
- Waiting :等待状态,比如调用 wait() 方法。
- TIME_WAITING:超时等待状态,超时以后自动返回。比如调用 sleep(long millis) 方法
- TERMINATED:终止状态,表示当前线程执行完毕。
看下源码:
- public enum State {
- NEW,
- RUNNABLE,
- BLOCKED,
- WAITING,
- TIMED_WAITING,
- TERMINATED;
- }
04、线程的优先级
- 线程的最小优先级:1
- 线程的最大优先级:10
- 线程的默认优先级:5
- 通过调用 getPriority() 和 setPriority(int newPriority) 方法来获得和设置线程的优先级
看下源码:
- /**
- * The minimum priority that a thread can have.
- */
- public final static int MIN_PRIORITY = 1;
-
- /**
- * The default priority that is assigned to a thread.
- */
- public final static int NORM_PRIORITY = 5;
-
- /**
- * The maximum priority that a thread can have.
- */
- public final static int MAX_PRIORITY = 10;
(编辑:ASP站长网)
|