当前位置: 代码迷 >> 综合 >> 大数据java基础准备 多线程任务实现的三种方式 自动回收和线程池
  详细解决方案

大数据java基础准备 多线程任务实现的三种方式 自动回收和线程池

热度:56   发布时间:2024-02-05 13:27:04.0
  • 线程概念

1.一个进程可以有多个线程至少有一个线程

2.生命周期:创建 就绪 运行 死亡

  • 创建线程

1.创建线程 继承Thread类 实例化 不建议使用耦合性高!功能内聚 模块耦合应该低 

2.继承接口Runable 通过Thread类构造创建线程 可设置线程名

3.继承接口Callable 只能在线程池中作为线程任务使用

PS:线程通常配合while使用 

  • 线程使用

1.start() 线程就绪 ,cpu随机分配执行权

设置执行权优先级.setPriority() 范围1-10 默认5

2.join()此方法和之前就绪线程交替执行完后面线程才会执行

3.sleep()休眠状态 参数毫秒

4.setDaemon()设置此线程为守护线程 赋值验证其他线程 执行任务的线程只有守护线程则无效

  • 对象锁

1.关键字 synchronized 可以包装方法 非静态监听器可以是this  静态方法监听器是类的类名..class

2.Lock 实现类ReentrantLock() 上锁lock 释放 unlock 包装方法一样写在方法里 

  • 死锁

1.代码逻辑上错误 外层拿不到子锁不释放  即嵌套锁对象 最好方法是纠正逻辑错误

  • 连接池Executors类

.ExecutorService ex = Executors.newFixedThreadPool(10); 构造方法线程数

.ExecutorService service = Executors.newCachedThreadPool();无构造放方法 线程根据需求创建释放 

方法自己点 简明知义submit 提交线程任务(无有返回值Futrue) 销毁线程池shutdown()实际开发中不会销毁