构造一个线程池为什么需要几个参数?如果避免线程池出现OOM?`Runnable`和`Callable`的区别是什么?本文将对这些问题一一解答,同时还将给出使用线程池的常见场景和代码片段。`Executors`为我们提供了构造线程池的便捷方法,对于服务器程序我们应该杜绝使用这些便捷方法,而是直接使用线... ...
分类:
编程语言 时间:
2018-08-30 10:53:20
阅读次数:
181
1、线程池概念 线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。 为什么要使用线程池? 在java中,如果每个请求到达就创建一个新线程,开销是相当大的。在实际使用中,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可 ...
分类:
编程语言 时间:
2018-08-28 22:00:01
阅读次数:
165
线程的生命周期: 新建,就绪,执行,阻塞,消亡 通过 new 关键字,线程被创建, 进入新建状态; 线程调用start () 方法时,线程进入就绪状态, 意味着线程有权利获取cup的时间片,等待jvm调度; 当线程获取cup时,线程被执行,体现就是线程的run()方法被执行; 当线程的run() 方 ...
分类:
编程语言 时间:
2018-08-27 21:49:25
阅读次数:
177
ThreadPoolExecutor继承抽象类AbstractExecutorService,该类实现了两个interface:ExecutorService(子)和Executor(父); 构建ThreadPoolExecutor时,需要如下参数: corePoolSize: 线程池维护线程的最少 ...
分类:
编程语言 时间:
2018-08-27 14:04:02
阅读次数:
141
多线程实践分页查询 多线程是个好东西,用好了可以对性能提升很大。之前写了一分页查询的页面,大致的模型是这样的: 希望对A进行分页查询,但是又想把B,C,D,E的信息也带出来,最开始是没有用多线程,强行查询除了A的List,然后遍历A中的元素,依次查询出对应的B,C,D和E。当时看了一下请求时间大概有 ...
分类:
编程语言 时间:
2018-08-24 00:29:50
阅读次数:
184
1,继承 Thread 测试 2,实现 Runnable 接口 ...
分类:
编程语言 时间:
2018-08-23 13:03:28
阅读次数:
178
一、Future使用 FutureTask是Future和Callable的结合体。传统的代码是这样写的 Future f = executor.submit(new Callable()); 然后通过Future来取得计算结果。但是,若开启了多个任务,我们无从知晓哪个任务最先结束。因此,若要实现“ ...
分类:
编程语言 时间:
2018-08-21 15:18:49
阅读次数:
147
package cn.itcast.thread; /*守护线程(后台线程),一个进程中如果只剩下守护线程,那么守护线程也会死亡 * 定义守护线程的方式: * 调用线程的setDaemo(true)即可将线程设置为守护线程,其余用法与一般的线程一样*/ public class Demo8 exte... ...
分类:
编程语言 时间:
2018-08-17 13:54:45
阅读次数:
168
一、什么是线程池 为了避免系统频繁的创建线程,我们可以让创建的线程复用。由线程池统一管理线程的创建和回收以及销毁的过程,当使用需要使用一个线程的时候,就从线程池中取出一个空闲线程,当完成工作后,并不是关闭线程,而是将这个线程退回到线程池,供其他任务使用。创建线程池的几个原因: 频繁的创建销毁线程可能 ...
分类:
编程语言 时间:
2018-08-17 11:27:29
阅读次数:
140
java线程有6种状态: 新建线程new,启动线程runnable,阻塞block,限时等待timed_waiting,等待线程waiting,终止线程terminated 1.限时等待timed waiting :处于这种状态的线程不会被分配cpu执行时间。不过无须等待被其他线程显式地唤醒,在一定 ...
分类:
编程语言 时间:
2018-08-15 15:31:19
阅读次数:
169